Java访问调用者变量,是否可能?怎么样?

时间:2011-11-25 17:43:46

标签: java

我有一个班级

    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?

2 个答案:

答案 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,而不是相反。