将变量传递给不同的类

时间:2012-11-15 05:20:16

标签: java class variables

我确信这有一个非常简单的解决方案,但我很想找到答案。我正在尝试将主类中的值设置为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。我理解为什么会这样,但我不知道解决方案。

6 个答案:

答案 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值。 希望这有帮助,祝你好运!