显示相同 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()
会生成警告。为什么?我该如何解决这个问题?
Enable project specific settings
已停用
Window
->Preferences
->Java
->Compiler
->Errors/Warnings
->Deprecated and restricted API
如果完全设置为 Warning
,从上图可以看出
注意: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= 中某些元素的所有用法]
使用 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()
会生成警告。为什么?我该如何解决这个问题?
Enable project specific settings
已停用Window
->Preferences
->Java
->Compiler
->Errors/Warnings
->Deprecated and restricted API
如果完全设置为Warning
,从上图可以看出
注意: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= 中某些元素的所有用法]