2017-06-23 50 views
0

我是java上的新手,在這個例子中是否有可能從ClassB獲取ClassA的id?來自封閉類的訪問實例屬性

public class ClassA { 

    private Long id; 

    private List<ClassB> listOfClassB; 

[...] 
} 

public class ClassB { 

    private Long num; 

    public boolean isValidRow() { 
     return this.num > ***ClassA.this.getId()***; 
    } 

[...] 
} 
+1

是的,如果你創建一個'A'類的實例 – Andrew

+0

閱讀關於封裝。 – LazerBanana

+0

如果在A班級,您將「this」傳遞給B並添加了mutators(或者將id更改爲public),那麼是的,否則在您當前的片段中是不可能的。 – Lemonov

回答

0

對於獲得的ClassAid領域,你需要有ClassA一個實例中ClassB,例如:

public class ClassA { 

    private Long id; 

    private List<ClassB> listOfClassB; 

[...] 
} 

public class ClassB { 

    private Long num; 
    private ClassA a; 

    public ClassB(Long num, ClassA a) { 
     this.num = num; 
     this.a = a; 
    } 

    public boolean isValidRow() { 
     return this.num > a.getId(); 
    } 

[...] 
} 

,並開始這樣說:

new ClassB(1, new ClassA(...)); 
0

嘗試如下:

public class ClassB { 

    private ClassA a; 
    private Long num; 

    public ClassB(ClassA a){ 
     this.a=a; 
    } 

    public boolean isValidRow() { 
     return this.num > a.getId(); 
    } 
} 

如下使用它:

... 
ClassA a = new ClassA(); 
ClassB b = new ClassB(a); 
... 

或者,如果你內部的創建BS:

ClassB b = new ClassB(this); 
0

這將工作只嵌套類:

class ClassA { 
    private long id; 

    class ClassB { 
     ClassA.this.getId(); // Will work here 
    } 
} 

要使其工作在你的情況下,你需要將ClassA的實例注入到ClassB的實例中:

class ClassA { 
    long id; 
} 

class ClassB { 
    private ClassA a; 
    ClassB(ClassA a) { 
     this.a = a; 
    } 

    void someMethod() { 
     long id = a.getId(); 
    } 
} 
0

你不能得到的ClassA的ID,但你可以從實例得到它的ClassA

例如

ClassA a =new ClassA(): 
    ClassB b =new ClassB(a); 

ClassA的:

public class ClassA{ 
    private Integer id; 
    public Integer getId(){return id;} 
}   

ClassB的:

public class B { 
    //whatever 
    private A a; 
    public B(A a){ 
     this.a=a; 
    } 

    public void someMethod(){ 
     //whatever 
     t.getId() // here you have the id. 
    } 
} 

現在無處不在您的ClassB您將可以訪問a.getId()