- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一些遗留代码实现了一个已弃用的接口(interface)。这个特定的组件很快就会被弃用并自行删除,因此通过重构来解决编译器警告的根本原因是没有意义的。相反,我想压制它。但是,我不希望压制的范围是整个类(class)。
代码原本是:
public class Foo
extends
Bar
implements
DeprecatedBaz,
Qux { ... }
DeprecatedBaz 是一个被标记为@Deprecated 的接口(interface),是第三方框架,这意味着我无法删除@Deprecated。我想抑制整个类(class)的警告而不是弃用。基本上我想写:
public class Foo
extends
Bar
implements
@SuppressWarnings("deprecation")
DeprecatedBaz,
Qux { ... }
但是这是无效的语法并且不解析。所以接下来我希望我可以在进口时做到这一点,但是这个 SO post似乎暗示它必须在类里面完成。
或者,我认为可能将其应用于接口(interface)规定必须实现的所有方法可能会解决该问题,但这也不起作用。
所以看来我不得不在类级别应用注释:
@SuppressWarnings("deprecation")
public class Foo
extends
Bar
implements
DeprecatedBaz,
Qux { ... }
我不喜欢这样,因为如果有人编辑这个类并引入引用已弃用代码的新代码,警告将被吞没。
在这种情况下有没有办法限制范围?
最佳答案
@SuppressWarnings
注释只能在声明点使用。即使使用允许在其他语法位置出现注释的 Java 8 注释增强功能,在这种情况下也不能在您需要的地方使用 @SuppressWarnings
注释,即在不推荐使用的位置接口(interface)出现在 implements
子句中。
您希望避免在类声明中放置 @SuppressWarnings
是对的,因为这会在整个类中抑制可能不相关的警告。
处理此问题的一种可能性是创建一个中间接口(interface)来扩展已弃用的接口(interface),并抑制其上的警告。然后,将已弃用接口(interface)的用途更改为子接口(interface):
@SuppressWarnings("deprecation")
interface SubBaz extends DeprecatedBaz { }
public class Foo ... implements SubBaz ...
这可以避免警告,因为类注释(在本例中为 @Deprecated
)不会被继承。
关于java - @SuppressWarnings ("deprecation") 可以应用于已弃用接口(interface)的使用而不应用于整个类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23820581/
我是一名优秀的程序员,十分优秀!