Netbeans IDE不会发出有关构造函数中调用的方法的警告

Bat*_*eba 8 java netbeans

Netbeans IDE擅长发现可能给您带来麻烦的代码.为什么没有发出警告

public class Base
{
    Base(...)
    {
        ...;
    }

    public void foo()
    {
        ...;
    }
}

public class Child extends Base
{
    Child(...)
    {
        super(...);
        foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于我在子构造函数中调用基类函数foo()?当然,这是完全合法的,因为基础对象是由foo()调用点构造的,但是foo()隐式地是一个虚方法,所以我真的希望得到一个警告,除非foo()被标记为final.

我认为如果从未标记为final的子类构造函数调用任何基类函数,IDE应该发出警告.

Dev*_*ler 3

确实如此。
当您在 NetBeans 中打开该文件时,您应该在对 的调用旁边看到一个黄色灯泡(提示指示器)foo。建议您:

  • 将 Child 设置为最终的
  • 使 foo 最终、私有或静态

如果您希望它更明显,请转到Tools > Options、 或Edit > Preferences、 或Netbeans > Preferences(取决于您的操作系统)。
选择Editor
选择 设置Hints
Language展开Java
选择Initialization
更改以Problematic call in the constructor
单击Show asError
OK

现在,该行以及您的文件将获得红色错误徽章。

请注意,这些都不会阻止您忽略该指标。代码仍然是合法的Java,所以NB不会阻止你编译。