为什么不鼓励间接访问静态成员?

时间:2013-09-18 09:03:04

标签: java eclipse

为什么不鼓励间接访问静态成员?在Eclipse中,您可以在Preferences>下启用/禁用此警告。 Java>编译器>错误/警告> “间接访问静态成员”。

将“间接访问静态成员”配置为导致警告时的示例:

JLabel label = new JLabel();
label.setAlignmentX(JLabel.CENTER_ALIGNMENT);       // causes warning    
label.setAlignmentX(Component.CENTER_ALIGNMENT);    // is ok

2 个答案:

答案 0 :(得分:19)

通过Component访问JLabel班级的成员会给人一种错误的印象,即此成员特定于JLabel,其实际上是Component的成员,恰好被其所有子类继承。 Nothig通过宣告课程来访问它,并且肯定会有一些清晰的东西。

答案 1 :(得分:8)

除了Marko Topolnik所说的话之外,如果JLabel将来有一个同名的静态成员,那么仅仅重新编译JLabel.java就会不要让调用代码知道该模块中存在的常量。相反,直到重新编译代码,尽管源代码反复说明,它仍然会愉快地使用Component.CENTER_ALIGNMENT

后一个引用肯定会通过名称Component引用CENTER_ALIGNMENT的静态成员,而前者引用Component中的成员或任何子类中的成员JLabel如果稍后在其中任何一个名称中重新定义了名称。

如果使用静态函数或成员变量,如果子类的更高版本也声明了重写,则即使没有重新编译,间接访问的含义也会改变。所有这些可能都有点假设,但无论如何都要考虑好。