【问题标题】:How to deprecate a method in interface? [duplicate]如何弃用接口中的方法? [复制]
【发布时间】:2014-06-02 08:28:48
【问题描述】:

我正在编写我的 android 库。我有一个叫IActivity的接口,这个接口里面有很多方法。

现在,我没有在这个接口中使用几个方法,似乎真的没有必要。我弃用了它们。但是,这是可能的应用程序的共享库。我所有的应用都开始抱怨了。

有没有一种方法可以弃用接口中的方法,这将阻止未来应用程序实现该方法(但也可以覆盖旧应用程序)?

【问题讨论】:

  • 你说的是什么意思...开始抱怨了

标签: java


【解决方案1】:

在接口中弃用方法(通过使用@Deprecated)不会阻止方法在类中实现。它不会在实现已弃用方法的类中生成编译器错误。它只是让类作者知道(在编译时)该方法在此时已被弃用,并且如果可能的话应该避免它(因为它可能在将来被删除)。事实上,当类作者重写该方法时,它甚至不会生成警告,而只会在有人试图调用该方法时生成。这是有道理的,因为如果类作者不重写该方法,该类将保持抽象。

要查看此警告,您需要引用接口类型而不是实现类类型。

试试这个例子,它应该会更清楚。

interface Testable {

    @Deprecated
    void test1();

    void test2();

}

public class Test005 implements Testable {

    @Override
    public void test1(){
        System.out.println("hello 1");
    }

    @Override
    public void test2(){
        System.out.println("hello 2");
    }

    public static void main(String[] args){
        Test005 tA = new Test005();
        tA.test1(); // no warning
        tA.test2(); // no warning

        Testable tB = new Test005();
        tB.test1(); // deprecation warning
        tB.test2(); // no warning
    }
}

【讨论】:

  • 弃用整个接口怎么样(应该在接口定义的方法中加@Depracted还是在接口前加@Depracted)谢谢
【解决方案2】:

有没有一种方法可以弃用接口中的方法,这将阻止未来应用程序实现该方法(但也可以覆盖旧应用程序)?

没有。但是您可以简单地删除它。然后基于更新接口的新类不需要实现它,但是基于旧版本接口的旧类不会抱怨(它们只会有从未使用过的方法,但这不是问题和本身)。

然而,更大的问题是,如果您对接口进行了如此多的更改,其中的一些方法您不再使用,那么实现该接口的旧类是否真的有可能与您更新的代码一起正常工作?好像不太可能。

【讨论】:

  • 好的,我明白了,非常感谢。
【解决方案3】:

“在接口中弃用方法的方法,这将阻止 方法的实现”

。做不到。

但是为什么不为你的新实现实现一个新接口呢。

【讨论】:

    【解决方案4】:

    在 Java 中弃用方法(或类或字段)的推荐方法是使用 @Deprecated 注释(自 Java 5 起)或 @deprecated JavaDoc 标记(自 Java 1.1 起)。请参阅how and when to deprecate APIs 上似乎相关的 Oracle 文档。

    请注意,以这种方式弃用任何方法只会让程序员知道此方法已被弃用,最好避免。没有实际的方法可以通过弃用方法来阻止实现。

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      相关资源
      最近更新 更多