【发布时间】:2012-02-10 06:56:02
【问题描述】:
我今天遇到了一个有趣的问题,我认为这在 Java 中是不可能的。我针对 jgroups 的 2.6 版编译了我的 java 代码,但在运行时使用了 2.12 版(tomcat Web 应用程序部署)。我收到以下错误
org.jgroups.Message.<init>(Lorg/jgroups/Address;Lorg/jgroups/Address;Ljava/io/Serializable;)
假设从那时起 API 会发生变化,我想将我的代码移植到 jgroups-2.12,但令我惊讶的是,代码在 jgroups-2.12 中编译得很好,并且当我更换了新的 jar 时(没有改变一行我的代码,只是针对 jgroups-2.12 而不是 jgroups-2.6 进行编译),它工作得非常好。
后来才知道2.6中的构造函数Message(Address, Address, Serializable)在2.12中改成了Message(Address, Address, Object)。这意味着在运行时,JVM 试图找到完全相同的方法,但没有成功。
这是否意味着 Java 编译器在编译时会嵌入准确的方法名称和准确的参数,而具有更广泛参数的方法将不起作用?
【问题讨论】:
标签: java compiler-construction compilation