3

メソッドまたはその他の「もの」からキーワードを削除した場合final、クラスのユーザーは再コンパイルする必要がありますか?

4

4 に答える 4

4

いいえ、最後のキーワードを削除しても、この疣贅に問題がないことを前提として、互換性が損なわれることはありません。

モジュール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);
    }
}
  1. コンパイルされたTest.java
  2. Test.java-> Output = "HELLO!"を実行しました
  3. 変更されたTest2.java:

    public class Test2{
        public static String test = "HELLO!";
    }
    
  4. コンパイルされたTest2.java

  5. Test.java-> Output = "HELLO!"を実行しました
于 2012-06-10T14:47:02.800 に答える
2

クライアントがコードを直接呼び出す場合はいいえ。しかし、リフレクションを使用してクラスを検出し、メソッドがfinalであるかどうかをチェックし、メソッドがfinalであるかどうかにかかわらず異なることを行うプログラムを壊す可能性があります。

于 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 に答える