Java @SuppressWarnings(“弃用”)是否可以应用于弃用接口的使用而不应用于整个类?

Java @SuppressWarnings(“弃用”)是否可以应用于弃用接口的使用而不应用于整个类?,java,deprecated,suppress-warnings,deprecation-warning,Java,Deprecated,Suppress Warnings,Deprecation Warning,我有一些实现了一个不推荐使用的接口的遗留代码。这个特定的组件将很快被弃用并自行删除,因此重构以解决编译器警告的根本原因是没有意义的。相反,我想抑制它。但是,我不希望抑制的范围是针对整个类的 代码最初是: public class Foo extends Bar implements DeprecatedBaz, Qux { ... } DeprecatedBaz是一个被标记为@Deprecated的接口,是第三方框架,这意味着我无法删除@Depreca

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

代码最初是:

public class Foo 
  extends 
    Bar 
  implements 
    DeprecatedBaz, 
    Qux { ... }
DeprecatedBaz是一个被标记为@Deprecated的接口,是第三方框架,这意味着我无法删除@Deprecated。我希望对整个类不显示警告,但不显示不推荐。基本上我想写:

public class Foo
  extends 
    Bar 
  implements
    @SuppressWarnings("deprecation") 
    DeprecatedBaz, 
    Qux { ... }
但是,这是无效的语法,无法解析。所以接下来我希望我可以在导入时完成,但这似乎意味着必须在类级别完成

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

因此,我似乎被迫在类级别应用注释:

@SuppressWarnings("deprecation")
public class Foo
  extends 
    Bar 
  implements 
    DeprecatedBaz, 
    Qux { ... }
我不喜欢这样,因为如果有人编辑这个类并引入引用不推荐代码的新代码,警告就会被忽略


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

注释的目的是触发警告


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

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

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

处理这种情况的一种可能性是创建一个中间接口,扩展不推荐使用的接口,并抑制其上的警告。然后,将不推荐使用的接口更改为子接口:

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

public class Foo ... implements SubBaz ...

这可以避免警告,因为类注释(在本例中为
@Deprecated
)不是继承的。

Deprecated接口位于我正在使用的框架中,而不是我的代码。所以我无法控制它,这就是为什么我需要抑制警告。我将更新这个问题,以反映这不是一个选项。这回答了我试图实现的是不可能的问题。创建中间接口的解决方案肯定能解决这个问题,但会弄乱代码。我们选择将范围扩大到这个有问题的类。@cclark是的,添加额外的接口显然是一种解决方法,而不是解决方案,添加额外的层肯定会有折衷。在您的例子中,如果所讨论的类很快将被删除——是的,对:-),那么在整个类上抑制弃用警告似乎是一种相当合理的方法。