假设我们有变量int a = 0;
和int c;
。
是否有可能使c
始终等于a + 1
,而不必一遍又一遍地重复输入c = a + 1
谢谢!
答案 0 :(得分:3)
不,不可能让一个变量跟踪另一个变量。通常,这也是不可取的:当一个变量的值与另一个变量的值相关联时,您应该只存储其中一个变量,并使另一个变量成为计算属性:
int getC() { return a+1; }
一个不太抽象的例子是一对年龄和出生日期。不应该同时存储它们,而应该单独存储出生日期,并制作一个用于动态计算当前年龄的getter方法。
答案 1 :(得分:1)
由于您以特定方式绑定了2个变量,因此请考虑使用自定义对象来包装a
和c
值。然后,您可以控制类逻辑中的对象状态。你可以这样做:
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;
}
}
答案 2 :(得分: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 commons中的MutableInt一样。1
类作为成员创建一个始终递增的Int
类。getI
方法中,始终从reference Int class
获取最新值a
。