2

サーブレットでアノテーション @MultipartConfig(location=Test.MY_CONST) を使用しようとしています。

以下のコード 1を使用すると、問題なく動作します。以下のコード 2を使用すると、コンパイル時に次の出力が得られます。

エラー: 属性値は定数でなければなりません
@MultipartConfig(location=Test.MY_CONST)


コード 1

public class Test {
    public static final String MY_CONST = "/constant/path";
}


コード 2

public class Test {
    public static final String MY_CONST;
    static {
        MY_CONST = "/constant/path";
    }
}

質問: 「ここで何が起こっているのですか?」 という質問がいくつかあります。

  1. Code 1Code 2の違いは何ですか?
  2. @MultipartConfig にはコンパイル時定数が必要MY_CONSTであり、静的初期化子でコンパイル時定数を割り当ててもコンパイル時定数が作成されないためMY_CONST、このエラーが発生しますか?
  3. コード 2System.out.println(Test.MY_CONST)の場合、リフレクションで の値を変更すると、によって何が出力されますか?MY_CONST
4

1 に答える 1