我确信这有一个非常简单的解决方案,但我很想找到答案。我正在尝试将主类中的值设置为classA,然后在classB中检索该值,并在返回Main中的答案之前对其执行其他操作:
示例:
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ClassA classA = new ClassA();
ClassB classB = new ClassB();
System.out.println("Number: ");
classA.setX(input.nextInt());
System.out.println("Total: " + classB.printTotal());
} // main
} // class
A类:
public class ClassA {
int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
} // class
ClassB的:
public class ClassB {
ClassA classA;
public int printTotal() {
int y = classA.getX() * 5;
return y;
}
} // class
无论我输入什么,都会返回null。我理解为什么会这样,但我不知道解决方案。
答案 0 :(得分:2)
您的ClassB
应该通过构造函数或(setter)方法定义ClassA
的依赖关系:
public ClassB(ClassA classA) {
this.classA = classA;
}
//or/and
public void setClassA(ClassA classA) {
this.classA = classA;
}
并在main
中注入依赖项,如下所示:
ClassB classB = new ClassB(classA);
答案 1 :(得分:1)
不是在ClassB中有ClassA的实例,也许你应该将ClassA对象作为参数传递给printTotal:
public class ClassB {
public int printTotal(ClassA classA) {
int y = classA.getX() * 5;
return y;
}
} // class
...
System.out.println("Total: " + classB.printTotal(classA));
希望有所帮助!
答案 2 :(得分:1)
在main中,使用classA对象设置classB的classA变量,rest应该没问题。
如果您的两个类都在相同的包中,那么您只需按照以下方式分配对象即可。
ClassA classA = new ClassA();
ClassB classB = new ClassB();
classB.classA = classA;//assign classA to ClassB's classA attribute
,否则:强>
ClassA classA = new ClassA();
ClassB classB = new ClassB();
classB.setClassA(classA);//assign classA to ClassB's classA attribute
并在ClassB中,添加一个setter方法:
public void setClassA(ClassA classA){
this.classA = classA;
}
答案 3 :(得分:0)
您的班级没有提及班级的实例。所以你可以再次使用setter或者更好地使用构造函数设置ClassA的实例:
public ClassB(ClassA instance) {
this.classA = instance;
}
答案 4 :(得分:0)
在class B
中,classA
应引用A
的对象。
在class B
public B(A a) {
this.classA = a;
}
在main方法中,使用classB
初始化classB = new B(classA);
。
答案 5 :(得分:0)
在打印值之前,您需要添加到ur main。
classB.classA = classA;
所以在你的classb中初始化的classA可以拥有你在main中设置的x值。 希望这有帮助,祝你好运!