2

私は次のような例外クラスのリストを定義しようとしています:

private static final List<Class<? extends Exception>> SOME_ERRORS = Arrays.asList(NumberFormatException.class, NullPointerException.class);

Eclipseから取得するエラーは次のとおりです。

Type mismatch: cannot convert from List<Class<? extends RuntimeException>> to List<Class<? extends Exception>>

アドバイスをいただけますか?例外のリストを例外のリストに変換できない理由がわかりません...

4

2 に答える 2

2

次を使用する必要があります。

List<Class<? extends RuntimeException>> SOME_ERRORS = Arrays.asList(NumberFormatException.class, NullPointerException.class);

から返されるジェネリック型は、Arrays.asList常に最も具体的な型、つまりを使用しRuntimeExceptionます。チェックされた例外をリストに追加した場合、このステートメントは次のようになります。

List<Class<? extends Exception>> SOME_ERRORS = Arrays.asList(IOException.class, NumberFormatException.class, NullPointerException.class);
于 2012-09-08T13:20:39.550 に答える
2

Reimeusの答えは+1 。ただし、親型を使用してリストを宣言したままにしておきたい場合はException、これが(Java 7構文を使用して)思いつくことができる最善の方法です。

private static final List<Class<? extends Exception>> SOME_ERRORS = new ArrayList<>();
static{
    SOME_ERRORS.add(NumberFormatException.class);
    SOME_ERRORS.add(NullPointerException.class);
}

問題はArrays.asList、適切なリストタイプを自動的に決定することによるものです。比較すると、これもエラーなしで機能します。

private static final List<Class<? extends Exception>> SOME_ERRORS = Arrays.asList(NumberFormatException.class, NullPointerException.class, Exception.class);

特に「定数」(s)を扱うstatic final場合は、通常、そのような配列/コレクションを変更できないようにすることをお勧めします。最悪の場合、これにより、いくつかの困難な問題が発生するのを防ぐことができます。例えば:

private static final List<Class<? extends Exception>> SOME_ERRORS;
static{
    List<Class< ? extends Exception>> errors = new ArrayList<>();
    errors.add(NumberFormatException.class);
    errors.add(NullPointerException.class);

    SOME_ERRORS = Collections.unmodifiableList(errors);
}
于 2012-09-08T13:22:49.947 に答える