如果我final
从方法或其他“事物”中删除关键字,我的类的用户是否必须重新编译?
问问题
143 次
4 回答
4
不,假设你对这个疣没问题,删除 final 关键字不会破坏兼容性:
如果模块 B 从模块 A 中的类调用任何方法,并且模块 C 覆盖了先前的最终方法,并且来自模块 C 的对象被传递给模块 B,则调用将转到模块 A 的实现。
于 2012-06-10T14:48:24.817 回答
3
从技术上讲,他们不必重新编译。
我想不出从方法/属性中删除 final 关键字可能导致的任何影响,这可能会导致兼容性损失,因此它不应该给您带来任何问题。
用示例代码测试,没有运行时错误:
public class Test2{
public static final String test = "HELLO!";
}
public class Test {
public static void main (String [] args) {
System.out.println(Test2.test);
}
}
- 编译Test.java
- Ran Test.java -> 输出 = “你好!”
修改Test2.java:
public class Test2{ public static String test = "HELLO!"; }
编译Test2.java
- Ran Test.java -> 输出 = “你好!”
于 2012-06-10T14:47:02.800 回答
2
如果您的客户直接调用您的代码,则不会。但是它可能会破坏一个使用反射发现你的类的程序,检查你的方法是否是最终的,如果方法是最终的,它会做不同的事情。
于 2012-06-10T14:48:38.410 回答
2
直接从马嘴里说:
将声明为 final 的方法更改为不再声明为 final 不会破坏与预先存在的二进制文件的兼容性。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.17
于 2012-06-10T15:30:44.077 回答