我有一个班级
main {
Class1 class1=new Class1();
class1.function1();
}
class Class1 {
int abc=1;
ArrayList<Class2> class2s=new ArrayList<Class2>();
int function1() {
class2s.add(new Class2(asd));
abc=555;
}
}
class Class2 {
int functionx() {
Log.e("abc?", ""+PARENT???.abc);
}
}
如何获取调用者类的变量,比如abc?
答案 0 :(得分:2)
使Class2
成为Class1
的内部非静态类:
class Class1 {
int abc=1;
ArrayList<Class2> class2s=new ArrayList<Class2>();
int function1() {
class2s.add(new Class2());
abc=555;
}
class Class2 {
int functionx() {
Log.e("abc?", abc);
}
}
}
Class2将具有对Class1实例的隐藏引用。
注意您的示例还有一个错误,即Class2没有构造函数。我已将new Class2(asd)
(asd
未定义)更改为new Class2()
答案 1 :(得分:2)
您可以将调用者作为参数传递,如下所示:
int functionx(Class1 caller) {
Log.e("abc?", ""+caller.abc)
}
并用
调用它Class2 cls = new Class2()
cls.functionx(this)
只要abc对Class2可见。否则,没有直接的方法可以通过Java了解您的调用者。变量class2s实现了Class1和Class2之间的单向关系。因此,您只能从Class1导航到Class2,而不是相反。