我正在编写我的android库。我有一个名为IActivity的接口,我在这个接口中有很多方法。
现在,我在这个界面中不使用couple方法,看起来真的没必要。我弃用了它们。但是,这是可能的应用程序的共享库。我的所有应用都开始抱怨了。
有没有办法在接口中弃用某个方法,这会阻止该方法的实现(但也可能覆盖旧应用程序)以供将来的应用程序使用?
答案 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文档。
请注意,以这种方式弃用任何方法只是让程序员知道此方法已被弃用,应该最好避免。通过弃用方法,没有实际的方法阻止实施。