【问题标题】:The "field hides another field" warning in java - Netbeansjava中的“字段隐藏另一个字段”警告 - Netbeans
【发布时间】:2013-08-30 23:13:07
【问题描述】:

我正在编写两个类。

public class ServerPanel extends JPanel{

private EventListenerList listenerList = new EventListenerList();
(...)
}

public class DetailsPanel extends JPanel{

private EventListenerList listenerList = new EventListenerList();
(...)
}

现在,Netbeans 警告我字段隐藏了另一个字段,对于 listenerList 变量。

所以我的问题是,这是一个严重的问题吗?我以后在添加/删除事件时会遇到问题吗?

这是很好的java练习吗?

我该怎么办?

谢谢!

【问题讨论】:

  • 避免“重新定义”字段,除非它是真正需要的。保持名称不同以避免混淆 - 它使文档查找更容易。在任何情况下,JPanel/超类代码都不会受到影响(因为只有方法可以是虚拟的),所以除非超类的 listenerList 打算从重新定义的类(或子类)中使用,否则什么都不会突然中断。

标签: java netbeans warnings compiler-warnings


【解决方案1】:

这不是编译错误,这两个字段是分开处理的,所以什么都不会破坏。但是,我不建议这样做,因为这可能会让任何处理代码的人(包括您)感到非常困惑。

您还应该知道,您不会替换超类中的 listenerList 字段,只是创建一个具有相同名称的新字段。

[编辑]

我应该澄清一下;名称​​完全相同不一样;完全限定名称不同:

javax.swing.JPanel.listenerList
whatever.yourpackageis.ServerPanel.listenerList
whatever.yourpackageis.DetalsPanel.listenerList

【讨论】:

  • java 语言的一个非常好的“功能”[讽刺]。同名,但属性不一样,编译器也不会报错,nice!
【解决方案2】:

https://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html

隐藏字段

在一个类中,一个与类中的字段同名的字段 超类隐藏超类的字段,即使它们的类型是 不同的。在子类中,超类中的字段不能 由其简单名称引用。相反,必须访问该字段 通过 super,这将在下一节中介绍。一般来说 说起来,我们不建议隐藏字段,因为这会使代码变得困难 阅读。

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2014-04-08
    • 2017-04-27
    相关资源
    最近更新 更多