删除“final”关键字是否会影响二进制兼容性?

时间:2012-06-10 14:43:38

标签: java binary-compatibility

如果我从方法或其他“东西”中删除final关键字,我班级的用户是否必须重新编译?

4 个答案:

答案 0 :(得分:4)

不,删除final关键字不会破坏兼容性,假设你对这个疣很好:

如果模块B从模块A中的类调用任何方法,模块C覆盖先前的最终方法,并且模块C中的对象传递给模块B,则调用将转到模块A的实现。

答案 1 :(得分:3)

从技术上讲,他们不必重新编译。

我无法想到从方法/属性中删除最终关键字可能导致兼容性损失的任何后果,因此它不会给您带来任何问题。

使用示例代码进行测试,没有运行时错误:

public class Test2{
    public static final String test = "HELLO!";
}

public class Test {
    public static void main (String [] args) {
        System.out.println(Test2.test);
    }
}
  1. 编译Test.java
  2. Ran Test.java - >输出=“你好!”
  3. 修改后的Test2.java:

    public class Test2{
        public static String test = "HELLO!";
    }
    
  4. 已编译的Test2.java

  5. Ran Test.java - >输出=“你好!”

答案 2 :(得分:2)

否,如果您的客户直接致电您的代码。 但是可能会破坏使用反射发现你的类的程序,检查你的方法是否是最终的,并且如果方法是最终的,则做不同的事情。

答案 3 :(得分:2)

直接从马的嘴里出来:

  

将声明为final的方法更改为不再声明为final不会破坏与预先存在的二进制文件的兼容性。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.17