2016-03-20 15 views
0

変数int a = 0;int c;があるとします。 は冗長何度も何度も変数値を他の変数に基づいて設定する

おかげc = a + 1を再入力することなく、常にa + 1のようなものに等しいあるcようにそれを作るためにそれは可能です!

+1

いいえ何とか動作をカプセル化しないと、これはできません。 –

+0

'c = a + 1? 'を使用した場合 – orvi

+0

あなたの質問はプロパティのアイデアと同じです。純粋なJavaのプロパティは、メソッドgetA()によって使用されます。setA(v) –

答えて

3

いいえ、1つの変数トラックを別の変数にすることはできません。

int getC() { return a+1; } 

A:1つの変数の値を別の変数の値に結び付けられているとき、あなたは他の一方を計算プロパティを片方だけを格納し、行う必要があります。通常、これはどちらかの望ましくありませんあまり抽象的な例は、年齢と生年月日の接続されたペアです。両方を保存するのではなく、生年月日だけを保存し、現在の年齢を動的に計算するゲッターメソッドを作成する必要があります。

1

2つの変数が特定の方法で結ばれているため、カスタムオブジェクトを使用してacの値をラップすることを検討してください。次に、クラスロジック内でオブジェクトの状態を制御できます。答えはノーである、あなたはのJavaで直接それを行うことはできませんが、あなたはintクラスを再設計することができ、例があり、まず

public class ValuePair { 

    private final int a; 
    private final int c; 

    public ValuePair(int a) { 
     this.a = a; 
     this.c = a + 1; 
    } 

    public int getA() { 
     return a; 
    } 

    public int getC() { 
     return c; 
    } 
} 
+0

オブジェクトに変更可能性が必要な場合は、varialbesの 'final'修飾子を取り除いて、' setValues(int a) 'のような唯一の設定子を作成して、両方の変数に' a'と 'c'を割り当てます –

1

public class Test { 
    public static void main(String[] args) throws IOException { 
     MyInt myInt1 = new MyInt(1); 
     KeepIncrementOneInt myInt2 = new KeepIncrementOneInt(myInt1); 
     System.out.println(myInt2.getI()); 
     myInt1.setI(2); 
     System.out.println(myInt1.getI()); 
     System.out.println(myInt2.getI()); 
    } 
} 
class MyInt { //your own int class for keep track of the newest value 
    private int i = 0; 
    MyInt(int i) { 
     this.i = i; 
    } 
    public int getI() { 
     return this.i; 
    } 
    public void setI(int i) { 
     this.i = i; 
    } 
} 
class KeepIncrementOneInt { //with MyInt Class to get the newest value 
    private final MyInt myInt; 
    KeepIncrementOneInt(MyInt myInt) { 
     this.myInt = myInt; 
    } 
    public int getI() { 
     return this.myInt.getI() + 1; //get the newest value and increment one. 
    } 
} 
あなたはこのような何かを行うことができます
  • 我々は、最新の値aを追跡するために参照型を必要とするので、あなた自身のIntクラスを作成します。 ApacheのコモンズではMutableIntのようになります。
  • メンバーとしてIntクラスを使用して常に増分1クラスを作成します。
  • getIメソッドでは、常にreference Int classから最新の値aを取得します。
関連する問題