8
最近、私はリフレクションで多くのことをしてきましたが、この小さなユーティリティメソッドを実装しました。最初のバージョンはコンパイルされませんが、後者はコンパイルされています。クラスの配列クラスを取得する際に驚くべきコンパイルエラー
はコンパイルされません:
public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType) {
return Array.newInstance(componentType, 0).getClass();
}
コンパイルとうまく動作します:
public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType) {
Class c = Array.newInstance(componentType, 0).getClass();
return c;
}
つの質問:それが悪いのでしょうか?これを行うより良い方法はありますか?ここで
は最初からコンパイルエラーです:getClass()
の
TypeUtils.java:[12,60] incompatible types: java.lang.Class<capture#1 of ? extends java.lang.Object> cannot be converted to java.lang.Class<T[]>
ああ。私はそれを試みましたが、intellijは抑止警告でさえ、まだ動揺していました(inconvertibleタイプについては赤い下線)。私はバグを発見したようだ。 – RutledgePaulV
キャストをお持ちの場合はOKです。おそらく、この種の警告をエラーとして扱うようにIDEを設定しているのでしょうか?私はあなたがEclipseでそれを行うことができることを知っています。 – MightyPork
Hm、この種のエラーでレベルを調整する方法を探しましたが、それを見つけられませんでした。ジェットブレーンズが以前にバグとしてこのようなケース(ここではhttp://youtrack.jetbrains.com/issue/IDEA-105846)を修正したので、私はそれを提出します。 – RutledgePaulV