Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为同一类的方法显示不推荐使用的警告_Java_Eclipse_Annotations_Deprecated - Fatal编程技术网

Java 为同一类的方法显示不推荐使用的警告

Java 为同一类的方法显示不推荐使用的警告,java,eclipse,annotations,deprecated,Java,Eclipse,Annotations,Deprecated,在使用eclipse时,我希望在使用的任何方法被标记为@Deprecated后立即看到警告。如果是这样的话,方法调用将被正确地划掉,但是如果方法来自同一个类,eclipse不会发出警告。请参见下面的屏幕截图 为了更好地复制,我还将以文本形式提供代码: /* MainClass.java */ public class MainClass { public static void main(String[] args) { MainClass.foo();

在使用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()
生成警告。为什么?我怎样才能解决这个问题

  • 启用项目特定设置
    已停用
  • 窗口
    ->
    首选项
    ->
    Java
    ->
    编译器
    ->
    错误/警告
    ->
    如果完全设置为
    警告
    ,可以从上图中看到


注:是否不相关

不推荐注释的确切定义不在javadoc中,而是在第9.6.4.6节中

本质上说,使用不推荐使用的元素将生成警告,除非

use和declaration都在同一个最外层类中

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

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

我相信这个规则的原因是,可以假定最外层或顶级类中的代码是一起维护和演化的。使一个元素不推荐通常是向“外部”编码的信号,可能是由其他人维护的,表明该元素将发生某些事情。通常在一个类中应用不同的规则。不推荐使用的元素(如私有元素)的内部使用可能非常好

编译器或IDE发出超出JLS要求的额外警告可能是合法的,例如在同一最外层类中使用不推荐使用的元素。不过,我不知道有哪个系统能做到这一点


但是您使用的是Eclipse,我相信它和其他IDE一样,可以很容易地找到类中某些元素的所有用法。

感谢您提供了详细易懂的答案!所以你的建议是接受它还是围绕它工作?@Blauhirn是的,基本上是接受它。或者,如果您想在声明某个不推荐使用的元素的同一文件中快速查找该元素的所有用法,请在定义点更改其拼写,并查找所有红色曲线。:-)@Blauhirn
已弃用的
注释的行为是由JLS强制执行的,并且可能会烘焙到编译器中。我认为你没有办法改变它。在我看来,我们不大可能改变JLS;它似乎并不重要,而且有合理的理由证明它的存在。