web-dev-qa-db-ja.com

Java属性は定数式エラーでなければならないため、コードはコンパイルされません

次がコンパイルされない理由がわかりません。 IDEが与えるエラーは、「注釈属性RequestParam.defaultValueの値は定数式でなければなりません」です。

私のプロジェクトにはSpringとMavenが関係しており、次のようになります。

private static final String MAX_LONG_AS_STRING = Long.toString(Long.MAX_VALUE);

@RequestMapping(method=RequestMethod.GET)
public List<Spittle> spittles(
        @RequestParam(value="max",
                    defaultValue=MAX_LONG_AS_STRING) long max,
        @RequestParam(value="count", defaultValue="20") int count) {
    return spittleRepository.findSpittles(max, count);
}

エラーはLongからStringへの変換に起因すると考えていますが、修正方法はわかりません。私はどんな助けにも感謝します、私は注釈と春に新しいです。

Javaルールは、注釈があり、プリミティブ型(intなど)またはStringなどのパラメーターを持っている場合、値は定数式でなければなりません[これは、Springとは関係ありません。]大まかに言って、定数式は、コンパイラが値を計算できる式です。ただし、定数式を構成する規則はありますが、これらの規則は JLS 15.28 にあります。特定のタイプの操作のみが定数式で使用できます。 Long.toString()はそれらの1つではないため、これを使用すると、式notは定数式に見えますが、 (_Long.toString_が何をするか知っているので、あなたのように見えます。しかし、コンパイラは、どのメソッドが値を把握できる「定数」メソッドであるかを知るためにすべてのメソッドのカタログを保持しません。コンパイル時。)

ただし、リンクの例は、引数の1つが文字列ではなく、したがってtoString()メソッドが暗黙的に呼び出される場合でも、_+_演算子を使用できることを示しています。これは、次のように動作させることができることを示唆しています。

_private static final String MAX_LONG_AS_STRING = "" + Long.MAX_VALUE;
_

しかし、私はそれを試していません。

53
ajb