Java 从封闭类访问实例属性

Java 从封闭类访问实例属性,java,Java,我是一个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 > *

我是一个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()***;
    }

[...]
}
公共类ClassA{
私人长id;
B类的私有列表;
[...]
}
公共B类{
私有长num;
公共布尔值isValidRow(){
返回this.num>***ClassA.this.getId()***;
}
[...]
}

要获取
ClassA
id
字段,您需要在
ClassB
中有一个
ClassA
的实例,例如:

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();
    }

[...]
}
    ClassA a =new ClassA():
    ClassB b =new ClassB(a);
请尝试以下操作:

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);

这仅适用于嵌套类:

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();
    }
}

您无法获取
ClassA
的id,但可以从
ClassA

例如:

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();
    }

[...]
}
    ClassA a =new ClassA():
    ClassB b =new ClassB(a);
A类:

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

    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()

是,如果您创建
a
类的实例,请阅读有关封装的内容。如果在类a中,您将“this”传递给B并添加变异子(或将id更改为public),则可以,否则无法从您当前的代码段中读取。可能重复