在类之外更改java对象

时间:2012-07-13 14:24:30

标签: java class object

这是我的问题,如何更改其类之外的对象,以便它保持在外部类中所做的更改?

以下是代码示例:

主要课程:

    public class Main {

        public static void main(String[] args)
        {
            Variable var = new Variable(1,2,3);
            Change.changeVar(var);
            System.out.println("" + var.geta() + "" + var.getb() + "" + var.getc());
        }
    }

变量类:

public class Variable {

private int a;
private int b;
private int c;

public Variable(int a, int b, int c)
{
    this.a = a;
    this.b = b;
    this.c = c;
}

public int geta()
{
    return this.a;
}

public int getb()
{
    return this.b;
}

public int getc()
{
    return this.c;
}

}

更改课程

public class Change {

public static void changeVar(Variable var)
{
    Variable var2 = new Variable(4,5,6);
    var = var2;
}

}

6 个答案:

答案 0 :(得分:2)

在你的例子中,没有。当changeVar()退出时,将丢弃参数var,并且main()方法中的var保留其原始值。阅读pass by reference

答案 1 :(得分:2)

public class Variable {

    private int a;
    private int b;
    private int c;

    public Variable(int a, int b, int c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public int geta()
    {
        return this.a;
    }

    public int getb()
    {
        return this.b;
    }

    public int getc()
    {
        return this.c;
    }

    // depending on your use case, setters might be more appropriate
    // it depends on how you want to control the changing of the vars
    public void update(int a, int b, int c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

}

public class Change {

    public static void changeVar(Variable var)
    {
        var.update(4,5,6);
    }
}

答案 2 :(得分:1)

这样做?你不能。

您正在传递对该实例的引用。但是,在函数内部,您使用新引用。分配给新参考不会影响其他参考。

答案 3 :(得分:1)

您不能以您描述的方式执行此操作,因为在Java中,变量是按值传递的。但是,您可以通过不同的方式实现所需的效果:

public class Variable {

    private int a;
    private int b;
    private int c;

    public Variable(int a, int b, int c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    public int geta()
    {
        return this.a;
    }

    public int getb()
    {
        return this.b;
    }

    public int getc()
    {
        return this.c;
    }

    public void seta(int a) { this.a = a; }
    public void setb(int b) { this.a = b; }
    public void setc(int c) { this.a = c; }
}

public class Change {

    public static void changeVar(Variable var)
    {
        var.seta(4);
        var.setb(5);
        var.setc(6);
    }

}

答案 4 :(得分:0)

您需要提供setter方法并在原始对象上调用它们:

public void seta(int newa) { this.a = newa; }

然后你会说

public static void changeVar(Variable var)
{
    var.seta(4);
    //etc
}

您只需要重新定位本地变量引用var以指向新实例var2。它对传递给方法的原始实例的值没有影响。

答案 5 :(得分:0)

public static void changeVar(Variable var)
{
    Variable var2 = new Variable(4,5,6);
    var = var2;
}

首先,你可以在Variable类中编写一些setter方法,然后你可以在上面的代码中调用这些setter方法,比如var.setA(4) ......等等。enter code here