ジェネリックに関する質問があります。境界を持つジェネリックをコンパイルする際のエラー
私がクラス内にこのスニペットを持っている(のは、ケース1にそれを呼びましょう):
static {
final List<Class<? extends A>> typeList = Arrays.asList(
C.class,
D.class
);
}
と
public interface A {…}
public class C extends B {…}
public class D extends B {…}
public abstract class B implements A {…}
Androidのメーカーが文句を言うと、それは上記の行final List…
にコンパイルされません。
互換性のないタイプ
必須リスト< クラス<?拡張A > >
Found List < クラス<?static { final List<Class<? extends A>> typeList = Arrays.asList( C.class, D.class ); }
と
public interface A {…} public class C implements A {…} public class D implements A {…}
と、それはコンパイル:B > >
しかし、以前、私はこのコードを(のは、ケース2、それを呼びましょう)だったが拡張
だから、私はこの中にケース1を変更するだけで問題を絞り込むために、試み:
static {
final List<Class<? extends A>> typeList = Arrays.asList(
B.class
);
}
Bがケース2にちょうどCとDのように、Aを実装していることに注意してください。しかし、コンパイラはまだ不平を言う。
私はこの問題を理解するためのアイデアがありません。私はJava Language Specificationタイプと値の章を読んでいますが、それでも何もありません。
私はStackOverflowで検索しましたが、同様の質問は見つかりませんでした。
任意のポインタ? (PS:誰かが行う前に、XKCDを必須としています)
私のためにうまくコンパイルします。 Java 7を使用している場合は、明示的な型引数を使用することができます。 –
Sotiros Delimanolis、確かにその質問と重複しています。 –