使用 eclipse,我希望尽快看到警告any我使用的方法标记为@Deprecated
。如果是这样,方法调用将被正确划掉,但如果该方法源自同一个类,则 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()
生成警告。为什么?我怎样才能解决这个问题?
-
Enable project specific settings
已停用
-
Window
->Preferences
->Java
->Compiler
->Errors/Warnings
->Deprecated and restricted API
如果完全设置为Warning
,从上图可以看出。
Note: Eclipse 没有显示已弃用警告? https://stackoverflow.com/questions/22855836/eclipse-not-showing-deprecated-warning is not related
的确切定义@Deprecated
注释不在 javadoc 中,但实际上在Java语言规范 https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.6.4.6,第 9.6.4.6 节。
本质上,它表示使用已弃用的元素将生成警告unless
使用和声明都在同一个最外层类中。
Since MainClass.foo()
and MemberClass.foo()
都在MainClass
,并且您对他们的呼叫也在MainClass
,不会生成任何警告。
致电给OtherClass.foo()
不在同一个最外层类中,因此会生成警告。
我相信这条规则的原因是,可以假定最外层或顶级类中的代码是一起维护和发展的。弃用某个元素通常是向“外部”(可能由其他人维护)编码的信号,表明该元素将发生某些情况。通常在一个类中应用不同的规则。内部使用已弃用的元素(例如私有元素)可能完全没问题。
编译器或 IDE 发出的问题可能是合法的额外的超出 JLS 要求的警告,例如在同一最外层类中使用已弃用的元素。不过,我不知道有任何系统可以做到这一点。
但是您使用的是 Eclipse,并且我确信它以及其他 IDE 可以轻松找到类中某些元素的所有用法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)