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

Thi*_*ilo 2 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();
Run Code Online (Sandbox Code Playgroud)

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

Chs*_*y76 5

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

来自JLS:符号引用的解决方案:

类或接口的二进制表示使用其他类和接口的二进制名称(第13.1节)以符号方式引用其他类和接口及其字段,方法和构造函数

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