1

我确信有一个非常简单的解决方案,但我正在拼命寻找答案。我正在尝试将主类中的值设置为 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

B类:

public class ClassB {
    ClassA classA;

    public int printTotal() {
        int y = classA.getX() * 5;
        return y;
    }
} // class

无论我输入什么都返回 null。我明白为什么会这样,但我不知道解决方案。

4

6 回答 6

2

您应该通过构造函数或(setter)方法ClassB定义对依赖项:ClassA

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

//or/and

public void setClassA(ClassA classA) {
    this.classA = classA;
}

并将依赖项注入main如下:

ClassB classB = new ClassB(classA);
于 2012-11-15T05:24:11.617 回答
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));

希望有帮助!

于 2012-11-15T05:23:31.297 回答
1

在 main 中,用 classA 对象设置 classB 的 classA 变量,休息应该没问题。

如果你的两个类都在同一个包中,那么你可以简单地分配对象如下,你就完成了。

    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;
     }
于 2012-11-15T05:24:24.423 回答
0

您的 ClassB 没有引用 ClassA 的实例。因此,您可以再次使用 setter,或者更好地使用构造函数设置 ClassA 的实例:

public ClassB(ClassA instance) {
   this.classA = instance;
}
于 2012-11-15T05:22:22.720 回答
0

class B中,classA应该指的是 的对象A

包含一个构造函数class B

public B(A a) {
    this.classA = a;
}

在 main 方法中,使用classB初始化classB = new B(classA);

于 2012-11-15T05:25:21.730 回答
0

您需要在打印值之前添加到您的 main 中。

 classB.classA = classA;

因此在您的 classb 中初始化的 classA 可以具有您在 main 中设置的 x 值。希望这有帮助,祝你好运!

于 2012-11-15T05:26:37.183 回答