この場合を考えてみましょう:
public Class1 {
public static final String ONE = "ABC";
public static final String TWO = "DEF";
}
public Class2 {
public void someMethod() {
System.out.println(Class1.ONE + Class1.TWO);
}
}
通常、コンパイラは1つと2つの定数をインライン化することを期待します。ただし、この動作は保証されていますか?クラスパスにClass1を指定せずに実行時にClass2をデプロイし、コンパイラに関係なく動作することを期待できますか、それともこれはオプションのコンパイラ最適化ですか?
編集:一体なぜこれを行うのですか?アプリケーションの両端(RMIを介したクライアントとサーバー)間で共有される定数があります。この特定のケースでは、その除算の片側にしか存在できないクラスに定数を配置すると非常に便利です(コードの両側で共有する必要があるという理由だけで、任意の定数クラスに含めるのではなく、論理的にはその定数値を所有するものであるためです。コンパイル時にはすべて1セットのソースファイルですが、ビルド時にはパッケージごとに分割されます。