两个接口中的已弃用方法

4

我有一个带有已弃用方法的接口:

public interface A
{
    @Deprecated
    public String getUUID();
}

另外一个接口拥有相同的方法,但该方法不再被弃用:

public interface B
{
    public String getUUID();
}

一个实现了两个接口的类:
public class MyBean implements A, B
{
    @Override
    public String getUUID()
    {
        return UUID.randomUUID().toString();
    }
}

在编译MyBean��出现警告:

javac -Xlint:deprecation MyBean.java A.java B.java
MyBean.java:8: warning: [deprecation] getUUID() in A has been deprecated
    public String getUUID()
                  ^
1 warning

当我实现定义了非弃用方法的 B 时,我真的不明白为什么需要这个警告...


1
这不是预期的行为吗?由于您实现了两个,警告只是提醒 A 实现已被弃用。对我来说,这没有任何问题。 - HpTerm
可以承认的是,弃用机制在某种程度上运行较为粗略。但是,在java.lang.Deprecated的Javadoc中明确指出:“当一个被弃用的程序元素在非弃用代码中使用或覆盖时,编译器会发出警告”。因此,这种行为是按设计要求实现的。 - jpvee
2个回答

3

你已经回答了自己的问题。

你收到这个警告是因为你实现了一个带有@Deprecated注释的implement A。请参见此处

@Deprecated注释表示标记的元素已被弃用,不应再使用。每当程序使用带有@Deprecated注释的方法、类或字段时,编译器都会生成警告。

我认为这个警告没有什么问题。由于你确实正在实现一个在你正在实现的接口中找到的已弃用方法,所以它应该存在。


1
如果您在Java文档中提供了答案,而我只是写了一条评论,则您将得到+1。 - HpTerm
好的,这看起来有点混乱。感谢您的回答。 - Lachezar Balev

0
您提供的实现满足两个接口,因此适用于任何适用于它们中任何一个的内容也适用于该实现。没有理由将B单独列出为唯一适用的接口。如果您不想要A,则不要实现它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接