假设有一个名为Node的类和另一个名为Table的类。节点对象可以创建Table对象。显然,然后调用Table类的构造函数。是否有可能从Table构造函数中获取对创建此Table实例的Node对象的引用?一种方法是,如果在创建对象时,我强制Node对象将“this”作为参数传递给Table构造函数。还有其他方法不需要传递参数吗?
答案 0 :(得分:2)
我相信你可以使用Thread.getCurrentThread.getStackTrace()来访问调用堆栈并找出调用它的类名。 e.g。
Thread.getCurrentThread().getStackTrace()[1].getClassName();
但是如果你想访问该对象的实例,那么我认为访问它的唯一方法是将'this'传递给构造函数。
答案 1 :(得分:1)
在Java语言中获取对“调用”对象(调用方法,构造函数等的实例)的引用的唯一方法是将“this
”对象引用传递给“接收者”需要知道的方法。没有其他方法可以使用普通Java,AFAIK。
答案 2 :(得分:0)
这是一个完整的例子
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();
}
}