使用eclipse时,我想在任何使用的方法标记为时看到警告@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
,如上图所示。注意:Eclipse没有显示过时的警告吗?是不相关
@Deprecated
注释的确切定义不在javadoc中,而实际上在Java Language Specification的9.6.4.6节中。
从本质上讲,它表示不赞成使用的元素将生成警告,除非
使用和声明都在同一最外层类中。
由于MainClass.foo()
和MemberClass.foo()
都在内MainClass
,并且您对其的调用也在内MainClass
,因此不会生成警告。
对的调用OtherClass.foo()
不在同一最外层类中,因此将生成警告。
我相信此规则的原因是,可以假定最外层或顶级类中的代码可以一起维护和演化。使某个元素过时通常是一个信号,指示“外部”进行编码(可能由其他人维护),表明该元素将发生某些事情。通常,不同的规则适用于一个班级。在内部使用已弃用的元素(例如私有元素)可能会很好。
编译器或IDE发出除JLS要求之外的其他警告可能是合法的,例如在同一最外层类中使用不赞成使用的元素。不过,我不知道有任何系统可以做到这一点。
但是您使用的是Eclipse,并且我确信它以及其他IDE可以轻松找到类中某个元素的所有用法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句