Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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_Netbeans_Compiler Warnings - Fatal编程技术网

使用已弃用类的Java弃用类--我可以关闭编译器警告吗?

使用已弃用类的Java弃用类--我可以关闭编译器警告吗?,java,netbeans,compiler-warnings,Java,Netbeans,Compiler Warnings,我正在对一组Java类进行弃用,以便它们不再被使用。我不想关闭不推荐使用的编译器警告,但我发现,如果我的一个不推荐使用的类导入另一个不推荐使用的类,我也会收到一个警告。我不想修改我不推荐的代码,但我也不想在这些情况下发出警告。是否有方法(a)注释/注释代码以禁用警告(b)在这些情况下关闭编译器警告?我使用的是NetBeans,所以如果有一种特定于NetBeans的方法,它也可以工作 下面是一个简单的例子: 头等舱: /** * @deprecated No longer in use. **

我正在对一组Java类进行弃用,以便它们不再被使用。我不想关闭不推荐使用的编译器警告,但我发现,如果我的一个不推荐使用的类导入另一个不推荐使用的类,我也会收到一个警告。我不想修改我不推荐的代码,但我也不想在这些情况下发出警告。是否有方法(a)注释/注释代码以禁用警告(b)在这些情况下关闭编译器警告?我使用的是NetBeans,所以如果有一种特定于NetBeans的方法,它也可以工作

下面是一个简单的例子:

头等舱:

/**
 * @deprecated No longer in use.
 **/
@Deprecated
public class OldSubClass {
}
二等舱:

import com.old.package.OldSubClass; // Don't want this to create a warning

/**
 * @deprecated No longer in use.
 **/    
@Deprecated
public class OldClass {
       // code that makes use of OldSubClass that I don't want to change ...
       // Any methods that use OldSubClass are also deprecated ...
}
好的,这是允许我重现问题的最低限度(即使启用@superswarnings:

母班:

import another.pack.ChildClass;

@SuppressWarnings("deprecation")
public class MotherClass {
}
儿童班:

package another.pack;

/**
 * @deprecated
 */
public class ChildClass {
}

请注意,JavaDoc@deprecated标记甚至允许编译器抛出警告。如果我只使用@deprecated注释,我永远不会得到警告(即使没有supress)。

您可以使用其他注释:

@抑制警告(“弃用”)


您只将此注释放在母类中。导入OldClass时将保留警告,但OldSubClass的“递归警告”将被忽略。

NetBeans使用javac(来自JDK 7)为了确定何时何地显示这样的警告,因此任何使用
jdk7/bin/javac
的东西都应该以同样的方式在IDE的编辑器中工作。

这似乎对导入不起作用。不过,我发现它确实对方法本身起作用,因此从这个角度来看,它很有帮助在本例中,这将是OldClass,对吗?如果我在类级别将suppress放在其中,导入的警告仍然会出现。如果将注释放在类级别(而不是方法)上,它将起作用.好的,我明白你的意思,我会这么做的。不过,似乎类级别的SuppressWarnings应该关闭警告。你能给我一个你正在工作的示例吗。如果我把它放在类级别,我仍然会收到警告。可能的副本对原始问题进行了编辑,以显示我仍然收到警告的最小示例警告,即使启用了@SuppressWarnings(“弃用”)。这正是编译日志中的警告:…\src\java\MotherClass.java:1:警告:[弃用]另一个.pack.ChildClass中的另一个.pack.ChildClass已弃用导入另一个.pack.ChildClass;使用java 1.6.0_18 javac命令时,我也会收到相同的警告(使用-Xlint:deprecated),所以它不仅仅是NetBeans。我不想继续添加到这一个,而是只使用javac编译器,如果在MotherClass中启用了suppress,并且如果ChildClass具有@deprecated注释,并且没有JavaDoc标记,我也会收到警告。(不过,在该构造下,我在NetBeans中没有收到警告。)尝试使用不推荐使用的类的完全限定名,而不是导入它。在某些情况下,@SuppressWarnings足以按您预期的方式工作。但请注意,在javac处理@SW(“不推荐”)时存在已知的错误与它解析符号的时间和处理注释的时间有关。谢谢。这就是我的方式,我通过对代码的细微更改消除了异常。当然,从我看到的情况来看,抑制存在一些问题,但对我来说,现在更好奇了。