2011-11-25 3 views
0

내가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 말? Class2Class1의 내부 비 정적 클래스함으로써

답변

2

에 (이 asd도 정의했다) new Class2(asd)을 변경 한 abc는 Class2에 표시됩니다. 그렇지 않으면 Java에서 발신자를 알 수있는 직접적인 방법이 없습니다. 변수 class2s는 Class1과 Class2 간의 단방향 관계를 구현합니다. 따라서 Class1에서 Class2로만 이동할 수 있으며 다른 방향으로는 이동할 수 없습니다.

+0

'Class1 caller'가'Object caller'가 아니겠습니까? –

+0

맞습니다. 일반적으로 Object를 선택했습니다. 이 특정 예 (모든 구문 권한 등)에서는 Class1이어야합니다. – Sander

+0

이 예에서 변경되었습니다. – Sander

2

:

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는 클래스 1의 경우에 숨은 참조를 가질 것이다.

참고 예제에는 다른 실수가 하나 있습니다. 즉, Class2에는 생성자가 없습니다.

int functionx(Class1 caller) { 
    Log.e("abc?", ""+caller.abc) 
} 

및만큼

Class2 cls = new Class2() 
cls.functionx(this) 

로 전화 : 그래서처럼, 당신은 인수로 호출을 전달할 수 new Class2()

관련 문제