2016-03-20 96 views
0

假設我們有變量int a = 0;int c;。 是否有可能讓這個c總是等於像a + 1,而無需重新輸入冗餘c = a + 1一遍又一遍將變量值設置爲基於其他變量

謝謝!

+1

不需要。如果沒有以某種方式封裝行爲,這是不可能的。 –

+0

如果我們使用'c = a + 1?' – orvi

+0

你的問題類似於財產想法。純Java中的屬性被getA()方法使用setA(v) –

回答

3

不,不可能讓一個變量跟蹤另一個變量。通常情況下,這是不可取之一:當一個變量的值被綁定到另一個變量的值,你應該存儲只是其中之一,並且令對方一個計算屬性

int getC() { return a+1; } 

一不太抽象的例子是一對相連的年齡和出生日期。而不是將它們都存儲起來,應該單獨存儲出生日期,並制定一個用於動態計算當前年齡的getter方法。

1

由於您有2個變量以特定方式綁定,因此請考慮使用自定義對象來包裝ac值。然後你可以控制類邏輯中的對象狀態。你可以做這樣的事情:

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

如果你需要對象的可變性,你可以去掉varial上的'final'修飾符,創建唯一的setter,比如'setValues(int a)',它將同時賦值變量'a'和'c' –

1

首先,答案是否定的,你不能直接做在的Java,但你可以重新設計你的int類,有一個例子:

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. 
    } 
} 
  • 創建自己的Int類,因爲我們需要一個引用類型跟蹤的最新價值a。像apache共享中的MutableInt一樣。
  • 使用您自己的Int類作爲成員創建一個始終增量的1類。
  • getI方法中,它總是從reference Int class得到最新值a