Получение ссылки на объект, который пытается создать меня - PullRequest
2 голосов
/ 28 июня 2011

Допустим, есть класс с именем Node и другой класс с именем Table.Объект узла может создать объект таблицы.Очевидно, тогда вызывается конструктор класса Table.Можно ли получить из конструктора таблицы ссылку на объект Node, который создает этот экземпляр таблицы?Один из способов - если при создании объекта я заставляю объект Node передавать «this» в качестве параметра конструктору Table.Есть ли другой способ, где не нужно передавать ни одного параметра?

Ответы [ 3 ]

2 голосов
/ 28 июня 2011

Я полагаю, что вы можете использовать Thread.getCurrentThread.getStackTrace () для доступа к стеку вызовов и узнать имя класса, который его вызвал.например,

Thread.getCurrentThread().getStackTrace()[1].getClassName();

Но если вы хотите получить доступ к экземпляру этого объекта, то я думаю, что единственный способ получить к нему доступ - это передать this в конструктор.

1 голос
/ 28 июня 2011

Единственный способ получить ссылку на «вызывающий» объект (экземпляр, вызывающий метод, конструктор и т. Д.) На языке Java - это передать ссылку на объект «this» в метод «receive», которыйнужно знать.Нет другого способа использования простой Java, AFAIK.

0 голосов
/ 28 июня 2011

Вот полный пример

public class GivesNameOfCallingClass {
//constructor
    public GivesNameOfCallingClass() {
        try {
            throw new Exception("Error");
        }
        catch (Exception e) {
            System.out.println(e.getStackTrace()[1].getClassName());
        }
    }
}

И тестовый класс

public class GetNameOfCallingClassTest {
    public static void main(String[] args) {
        new GivesNameOfCallingClass();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...