如何弃用接口中的方法?

时间:2014-06-02 08:28:48

标签: java

我正在编写我的android库。我有一个名为IActivity的接口,我在这个接口中有很多方法。

现在,我在这个界面中不使用couple方法,看起来真的没必要。我弃用了它们。但是,这是可能的应用程序的共享库。我的所有应用都开始抱怨了。

有没有办法在接口中弃用某个方法,这会阻止该方法的实现(但也可能覆盖旧应用程序)以供将来的应用程序使用?

4 个答案:

答案 0 :(得分:3)

接口中的方法的弃用(通过使用@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
    }
}

答案 1 :(得分:1)

  

有没有办法在接口中弃用某个方法,这会阻止该方法的实现(但也可能覆盖旧应用程序)以供将来的应用程序使用?

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

然而,更大的问题是,如果您已经更改了界面,那么其中的方法就不再使用了,实现界面的旧类是否可能与更新的代码一起正常工作?这似乎不太可能。

答案 2 :(得分:0)

  

"在一个接口中弃用某个方法的方法会阻止   方法的实施"

即可。无法完成。

但为什么不为新的实现实现新的界面。

答案 3 :(得分:0)

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

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