将变量值设置为基于其他变量

时间:2016-03-20 11:24:32

标签: java variables

假设我们有变量int a = 0;int c;。 是否有可能使c 始终等于a + 1,而不必一遍又一遍地重复输入c = a + 1

谢谢!

3 个答案:

答案 0 :(得分:3)

不,不可能让一个变量跟踪另一个变量。通常,这也是不可取的:当一个变量的值与另一个变量的值相关联时,您应该只存储其中一个变量,并使另一个变量成为计算属性

int getC() { return a+1; }

一个不太抽象的例子是一对年龄和出生日期。不应该同时存储它们,而应该单独存储出生日期,并制作一个用于动态计算当前年龄的getter方法。

答案 1 :(得分: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;
    }
}

答案 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