Java:有没有办法用另一个变量将变量设置为某个操作?

Java:有没有办法用另一个变量将变量设置为某个操作?,java,variables,operations,Java,Variables,Operations,那么,有没有一种简单的方法可以使一个变量在另一个变量发生变化时发生变化? 基本上: int a = 0; int b = a + 5; int a = 1; 有没有办法改变b因为a改变了 谢谢 简单的答案是否定的,至少对于int这样的基本变量是否定的。要做到这一点,您必须使用引用变量构建一个结构 您可以编写一个小类来帮助您完成此任务: public class Change { private int a = 0; private int b = 0; public

那么,有没有一种简单的方法可以使一个变量在另一个变量发生变化时发生变化? 基本上:

int a = 0;
int b = a + 5;
int a = 1;
有没有办法改变b因为a改变了


谢谢

简单的答案是否定的,至少对于int这样的基本变量是否定的。要做到这一点,您必须使用引用变量构建一个结构

您可以编写一个小类来帮助您完成此任务:

public class Change {
    private int a = 0;
    private int b = 0;

    public Change(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public void setA(int newA) {
        this.a = newA;
        // Change b however you'd like, for example subtract newA.
        this.b = this.b - newA;
    }

    public int getA() {
        return a;
    }

    public void setB(int newB) {
        this.b = newB;
    }

    public int getB() {
        return b;
    }

    public static void main(String[] args) {
        // Create a new Change object:
        Change chg = new Change(0, 5);

        // Upon setting the value of a, you can do something to b in the method.
        chg.setA(1);
        System.out.println(chg.getB());
    }
}

您可以使用面向方面编程(AspectJ)捕获
b
的分配,并让它添加代码以更新
a

我不会就此举一个例子,因为我认为这不是一个正确的解决方案,除了核心专家。使用AOP意味着您和其他人在读取源代码时看到的代码与JVM实际执行的代码不同


而是考虑将两个变量存储在一个HORD类中,并使用<代码> SETA(..)和<代码> SETB(…)<代码>来更新这些值。然后,类知道如何在b被更改时更新a。

您可以尝试将计算包装到一个方法中,并用该方法替换所有出现的
b
。 例如:


正如其他人所指出的,在Java中,基于对另一个变量的赋值来更新一个变量的值是不可能的

但是,通过提供读取值的方法,可以轻松实现相同的效果。这样,当您可以按需计算时,
b
甚至不需要单独的变量:

private int a;
//...

public int calculateB() {
   return a + 5;
}

如果
b
是基元类型,并且没有使用(或者类似于
可观察的
,可能带有回调),则不会。如果结构指的是
,引用变量不是必需的,因为类可能具有基元类型而没有问题,则可能会有一个有趣的阅读。
private int a;
//...

public int calculateB() {
   return a + 5;
}