gpt4 book ai didi

java - 即使客户端项目不会再次编译,Java 接口(interface)是否可以更改?

转载 作者:行者123 更新时间:2023-12-02 05:47:57 25 4
gpt4 key购买 nike

我正在尝试更改 Proj2 中的界面。然而,Proj1已经在使用这个接口(interface),并且不会用我的新版本进行编译。

看起来只有当我更改/删除现有方法时才会出现问题,但添加新方法似乎不会引起任何问题。

因此,只要我只向接口(interface)“添加”方法,我就可以预期 Proj1 可以与 Proj2 的最新 Jar 配合使用。

这是一个坚如磐石的安全假设吗?

更新:接口(interface)和 impl 都位于 proj2 中。 Proj1 没有该接口(interface)的实现。

最佳答案

通过“使用”,您的意思是“使用接口(interface)引用对象并使用该引用调用接口(interface)定义的方法”,而不是“实现接口(interface)”(是的,您已经在注释中澄清了,但我只想重复一下,因为所有其他答案都是关于实现接口(interface)的)。

在这种情况下,只要您没有从接口(interface)中删除方法或更改其签名,您现有的代码就可以工作。

这样做的原因是编译器将方法调用转换为 invokeinterface字节码,通过名称引用接口(interface)类和方法。在运行时,JVM 只是验证实际引用是否实现了该接口(interface),并调用该方法。

如果您删除更改引用的接口(interface)方法,则会发生以下两种情况之一:JVM 将拒绝加载 proj1 中的类,因为接口(interface)引用无法解决,否则会给出 NoSuchMethodError (我相信这是第二个)。如果您删除或更改具体类中引用的方法,也会发生同样的情况。

关于java - 即使客户端项目不会再次编译,Java 接口(interface)是否可以更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com