gpt4 book ai didi

java - @SuppressWarnings ("deprecation") 可以应用于已弃用接口(interface)的使用而不应用于整个类吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:19 24 4
gpt4 key购买 nike

我有一些遗留代码实现了一个已弃用的接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com