1

これが私の質問です。クラス外のオブジェクトを変更して、外部クラスで行われた変更を維持するにはどうすればよいですか?

コードの例を次に示します。

メインクラス:

    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;
}

}

4

6 に答える 6

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);
    }
}
于 2012-07-13T14:31:13.597 に答える
2

あなたの例では、違います。changeVar()が終了すると、パラメーターvarは破棄され、main()メソッドのvarは元の値を保持します。参照によりパスを読んでください。

于 2012-07-13T14:26:55.953 に答える
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);
    }

}
于 2012-07-13T14:28:54.947 に答える
0
public static void changeVar(Variable var)
{
    Variable var2 = new Variable(4,5,6);
    var = var2;
}

まず、uはVariableクラスでいくつかのセッターメソッドを記述できます。次に、上記のコードでこれらのセッターメソッドを呼び出すことができます(var.setA(4)...など)。enter code here

于 2012-07-13T14:32:21.843 に答える
0

セッターメソッドを提供し、元のオブジェクトでそれらを呼び出す必要があります。

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

次に、あなたは言うでしょう

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

var新しいインスタンスを指すようにローカル変数参照を再ポイントするだけですvar2。メソッドに渡された元のインスタンスの値には影響しません。

于 2012-07-13T14:27:06.137 に答える
0

そのようにしていますか?できません。

インスタンスへの参照を渡しています。ただし、関数内では、新しい参照を使用します。新しい参照に割り当てても、他の参照には影響しません。

于 2012-07-13T14:27:13.603 に答える