变量阴影在 Java 类中的用途是什么?

2022-09-01 16:31:09

我正在阅读我的Deitel,Java How to Program一书,并遇到了“影子”这个词。如果允许阴影,那么在Java类中它有什么情况或目的是什么?

例:

public class Foo {

    int x = 5;

    public void useField() {
        System.out.println(this.x);
    }
    public void useLocal() {
        int x = 10;
        System.out.println(x);
    }
}

答案 1

阴影的基本目的是将本地代码与周围的类分离。如果它不可用,请考虑以下情况。

发布 API 中的类 Foo。在代码中,您可以对其进行子类化,而在子类中,请使用一个名为 bar 的变量。然后 Foo 发布更新,并向其类中添加一个名为 Bar 的受保护变量。

现在,由于您无法预料到的冲突,您的课程将无法运行。

但是,不要故意这样做。只有当你真的不关心范围之外发生的事情时,才会让这种情况发生。


答案 2

它对于您不希望仅为方法参数创建单独变量名称的 setter 非常有用,例如:

public void setX(int x) {
    this.x = x;
}

除此之外,我会避免它们。


推荐