删除接口会破坏代码调用对象的方法吗?

时间:2009-12-11 07:52:05

标签: java refactoring binary-compatibility

我需要在Java中进行一些重构,我需要保持一定程度的二进制兼容性。在这种情况下,我想删除一些遗留接口,这些接口不再在任何地方使用,并且需要相当大的(也是不赞成的)外部依赖。

我有实现接口C的类I,我有一个代码调用C实例上的方法(在接口中声明)。调用代码知道它正在使用C,而不仅仅是接口。

 class C implements I {
      void theMethod(){} ; // is declared in the interface I
 }

 C object;
 object.theMethod();

当我从类定义中删除接口(但保留所有方法)时,调用代码(根本不涉及接口)是否仍然有效(没有重新编译)?

3 个答案:

答案 0 :(得分:5)

是的,它会起作用 - 只要它没有在任何地方明确引用接口I

来自JLS: Resolution of Symbolic References

  

类的二进制表示   或接口引用其他类   和接口及其领域,   方法和构造函数   象征性地,使用二进制名称   (§13.1)其他类和   接口

引用类ClientClass的字段/方法的类C不包含对该类可能实现的接口I的隐式引用。

答案 1 :(得分:2)

只要类C的对象永远不会被称为I,它就会起作用。

您也可以参考Evolving Java-based APIs part 2

答案 2 :(得分:1)

如果它在任何地方导入接口,您可能会遇到调用代码的问题。如果任何调用代码中没有import接口,您可以合理地确信您的重构将按计划运行。

相关问题