显示相同 class 方法的弃用警告

Show deprecated warnings for methods of same class

使用 Eclipse,我希望在我使用的方法中 任何 被标记为 @Deprecated 时立即看到警告。如果是这样,方法调用将被正确划掉,但如果方法来自相同的 class,eclipse 不会发出警告。请参阅下面的屏幕截图。

为了更好的复现,我也会提供文本形式的代码:

/* MainClass.java */
public class MainClass {
    public static void main(String[] args) {
        MainClass.foo();
        MemberClass.foo();
        OtherClass.foo();
    }
    @Deprecated
    public static void foo() {
        return;
    }
    private static class MemberClass {
        @Deprecated
        protected static void foo() {
            return;
        }
    }
}

/* OtherClass.java */
public class OtherClass {
    @Deprecated
    public static void foo() {
        return;
    }
}

而只有 OtherClass.foo() 会生成警告。为什么?我该如何解决这个问题?


注意:Eclipse not showing deprecated warning?相关

@Deprecated 注释的确切定义不在 javadoc 中,但实际上在 Java Language Specification,第 9.6.4.6 节。

基本上它说使用已弃用的元素将产生警告 除非

The use and declaration are both within the same outermost class.

由于 MainClass.foo()MemberClass.foo() 都在 MainClass 内,并且您对它们的调用也在 MainClass 内,因此不会生成警告。

OtherClass.foo() 的调用不在同一个最外层 class 内,因此会产生警告。

我认为这个规则的原因是可以假定最外层或顶级 class 中的代码是一起维护和发展的。弃用一个元素通常是向可能由其他人维护的代码 "outside," 发出的信号,表明该元素将要发生某些事情。通常在 class 中应用不同的规则。在内部使用不推荐使用的元素,如私有元素,可能完全没问题。

编译器或 IDE 发出超出 JLS 要求的 额外 警告可能是合法的,例如在同一文件中使用已弃用的元素最外层 class。不过,我不知道有任何系统可以做到这一点。

但是您使用的是 Eclipse,我相信它和其他 IDE 一样,可以轻松找到 class.[=18= 中某些元素的所有用法]