2016-03-20 18 views
0

Angenommen, wir haben Variablen int a = 0; und int c;. Ist es möglich zu machen, so dass cist immer gleich etwas wie a + 1 ohne redundant mit c = a + 1 über in das Feld eintragen und immer wiederSetzen von Variablenwerten auf anderen Variablen

Dank!

+1

Nein. Dies ist nicht möglich, ohne das Verhalten irgendwie einzukapseln. –

+0

Was ist, wenn wir 'c = a + 1 verwenden?' – orvi

+0

Ihre Frage ist ähnlich zu Eigentum Idee. Die Eigenschaft in reinem Java wird von der Methode getA() verwendet. SetA (v) –

Antwort

3

Nein, es ist nicht möglich, eine Variable einer anderen Variablen nachzuführen. Normalerweise ist dies nicht wünschenswert, entweder, wenn ein Wert einer Variablen auf den Wert einer anderen Variablen gebunden ist, sollten Sie speichern nur einer von ihnen, und machen das andere eine berechnete Eigenschaft:

int getC() { return a+1; } 

A weniger abstraktes Beispiel ist ein verbundenes Paar aus Alter und Geburtsdatum. Anstatt beide zu speichern, sollte man nur das Geburtsdatum speichern und eine Getter-Methode erstellen, um das aktuelle Alter dynamisch zu berechnen.

1

Da Sie zwei Variablen auf eine bestimmte Weise gebunden haben, sollten Sie die Verwendung von benutzerdefinierten Objekten zum Umschließen der Werte a und c in Erwägung ziehen. Dann können Sie den Objektstatus innerhalb der Klassenlogik steuern. Sie können etwas tun:

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

Wenn Sie für das Objekt eine Veränderlichkeit benötigen, können Sie 'final'-Modifikatoren auf varialbes löschen, indem Sie den einzigen Setter wie' setValues ​​(int a) 'erzeugen, der beide Variablen' a' und 'c' zuweist –

1

Erstens Die Antwort ist nein, man kann es nicht direkt tun in Java, aber Sie können Ihre int Klasse neu zu gestalten, gibt ein Beispiel:

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. 
    } 
} 
  • erstellen Sie Ihre eigene Int Klasse, weil wir einen Referenztyp benötigen Spur des neuesten a der Wert zu halten. wie die MutableInt in Apache Commons.
  • Erstellen Sie eine Klasse immer 1 Klasse mit Ihrer eigenen Int Klasse als Mitglied.
  • In getI Methode, es ist immer von der reference Int class erhalten Sie den neuesten Wert a.
Verwandte Themen