Java 从封闭类访问实例属性
我是一个java新手,在这个例子中,可以从ClassB获得ClassA的id吗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 > *
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),则可以,否则无法从您当前的代码段中读取。可能重复