什么是在Java类中使用的variables阴影?
我正在阅读我的Deitel,Java如何编程的书,碰到了术语阴影 。 如果允许遮蔽,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); } }
阴影的基本目的是将本地代码从周围的类中分离出来。 如果不可用,请考虑以下情况。
API中的Foo类被释放。 在你的代码中,你可以inheritance它,在你的子类中使用一个名为bar的variables。 然后,Foo发布更新,并将名为Bar的受保护variables添加到其类中。
现在你的class级不会因为你无法预料的冲突而跑步。
但是,不要故意这样做。 只有当你不关心范围之外发生的事情时,才会发生这种情况。
对于那些你不想为方法参数创build一个单独的variables名的设置器来说,
public void setX(int x) { this.x = x; }
除此之外,我会避免他们。
一个主要目的是混淆人。 这是不好的做法,应该避免。
影子并不是真正的Java术语。 在范围中声明的variables与更大范围中的variables名称相同的任何情况下,该variables都被映射。
阴影的一些常见用途是当你有内部和外部类,并希望保持一个相同的名称的variables。
如果你可以避免它,你应该,因为它可能会导致混乱。
两个常见的用途是构造函数和设置方法:
public Foo(int x) { this.x = x; } public void setX(int x) { this.x = x; }
非常偶然的是,如果你想在一个瞬间拷贝一个variables,这个variables可能会在方法调用中改变。
private void fire() { Listener[] listeners = this.listeners; int num = listeners.length; for (int ct=0; ct<num; ++ct) { listeners[ct].stateChanged(); } }
(当然,一个人为的例子是没有必要的。