假设我有一个班级a和一个班级。
public class ClassA{
int a;
ClassB b = new ClassB();
}
public class ClassB{
int someInt;
void someFunction(){
//Here I want to access the variable a of the current ClassA.
}
}`
代码非常自我解释。 我可以在构造函数中添加ClassA,但我不想这样做,因为ClassB将由用户创建。 所以...也许在这里有所帮助?
答案 0 :(得分:4)
根据您当前的设计,ClassB
对ClassA
的存在一无所知。你需要:
ClassB
到ClassA
的直接关联。通常你是通过一个字段来完成的。ClassA
的引用分配到ClassB
。这是一种方法:
public class ClassA {
int a;
ClassB b = new ClassB(this);
}
public class ClassB {
int someInt;
ClassA classA;
public ClassB(ClassA classA) {
this.classA = classA;
}
void someFunction() {
System.out.println(classA.a);
}
}
以下是另一种方法:
public class ClassA {
int a;
ClassB b;
public ClassA() {
b = new ClassB();
b.setClassA(this);
}
}
public class ClassB {
int someInt;
ClassA classA;
public ClassB() {
}
void setClassA(ClassA classA) {
this.classA = classA;
}
void someFunction() {
System.out.println(classA.a);
}
}
答案 1 :(得分:1)
更改以下代码
public class ClassA{
int a;
ClassB b = new ClassB();
public void m1(){
b.someFunction(a)
}
}
public class ClassB{
int someInt;
void someFunction(int a){
//Here I want to access the variable a of the current ClassA.
}
}`
答案 2 :(得分:0)
如果B类的实例需要引用拥有或以其他方式引用B类实例的对象,则B的开发人员必须为A实例实现setter方法(或提供构造函数参数)。您无法强制B类开发人员这样做,除非B类适合包含A类的某个框架。如果是这种情况,您可以提供B必须实现的接口并通过该接口强制实现A的实例的setter。
答案 3 :(得分:0)
如果您想要访问classA
的成员,那么您将 将该类的实例传递到someFunction
方法中,或者通过{{{}的构造函数传递1}}或作为方法的参数,即
classB
或者您可以// Via constructor
public class ClassB {
private ClassA a;
public ClassB( ClassA a ) {
this.a = a;
}
public void someFunction() {
System.out.println( a.a );
}
}
// Via method
public class ClassB {
public void someFunction( ClassA a ) {
System.out.println( a.a );
}
}
成为a
成员ClassA
,但我不认为这就是您所追求的目标。