gpt4 book ai didi

java - 显示同一类方法的弃用警告

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:02 24 4
gpt4 key购买 nike

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

Eclipse_warnings

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

/* 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() 会生成警告。为什么?我该如何解决这个问题?

  • 启用项目特定设置已停用
  • 窗口->首选项->Java->编译器->错误/警告-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 中,您对它们的调用也在 code>MainClass,没有产生警告。

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

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

编译器或 IDE 在 JLS 要求的警告之外发出附加警告可能是合法的,例如在同一个最外层类中使用已弃用的元素。不过,我不知道有任何系统可以执行此操作。

但是您使用的是 Eclipse,我相信它和其他 IDE 一样可以轻松找到类中某个元素的所有用法。

关于java - 显示同一类方法的弃用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com