5

我有一些实现已弃用接口的遗留代码。这个特定组件将很快被弃用并自行删除,因此重构以解决编译器警告的根本原因是没有意义的。相反,我想压制它。但是,我不希望压制的范围是整个班级。

代码原来是:

public class Foo 
  extends 
    Bar 
  implements 
    DeprecatedBaz, 
    Qux { ... }

DeprecatedBaz 是一个被标记为@Deprecated 的接口,它是一个第三方框架,这意味着我无法删除@Deprecated。我想禁止整个班级的警告,但不反对。基本上我想写:

public class Foo
  extends 
    Bar 
  implements
    @SuppressWarnings("deprecation") 
    DeprecatedBaz, 
    Qux { ... }

但是,这是无效的语法,不会解析。所以接下来我希望我可以在导入时做到这一点,但这篇SO 帖子似乎暗示它必须在课堂上完成。

或者,我认为可能将其应用于必须实现接口规定的所有方法可能会解决问题,但这也不起作用。

所以看来我不得不在类级别应用注释:

@SuppressWarnings("deprecation")
public class Foo
  extends 
    Bar 
  implements 
    DeprecatedBaz, 
    Qux { ... }

我不喜欢这样,因为如果有人编辑这个类并引入引用已弃用代码的新代码,则警告将被吞下。

在这种情况下有没有办法限制范围?

4

2 回答 2

4

@SuppressWarnings注释只能在声明处使用。即使使用允许注释出现在其他语法位置的 Java 8 注释增强功能,@SuppressWarnings在这种情况下也不能在需要它的地方使用注释,即在implements子句中出现不推荐使用的接口的地方。

您希望避免放置@SuppressWarnings类声明是正确的,因为这将在整个类中抑制可能不相关的警告。

处理此问题的一种可能性是创建一个扩展已弃用接口的中间接口,并抑制其上的警告。然后,将弃用接口的用途更改为子接口:

@SuppressWarnings("deprecation")
interface SubBaz extends DeprecatedBaz { }

public class Foo ... implements SubBaz ...

这可以避免警告,因为类注释(在这种情况下,@Deprecated)不是继承的。

于 2014-06-01T20:25:08.870 回答
-3

注释的目的@Deprecated是触发警告。

如果您不想触发警告,请不要使用注释。

于 2014-05-23T03:45:55.620 回答