まずジェネリクス<T>を持つスーパークラスAを作成します。
A.java:Java
1public class A<T>{ 2}
次に、クラスAを継承して再度ジェネリクス<T>を持たせたサブクラスBを作成します。
B.java:Java
1public class B<T> extends A<T>{ 2}
このクラスBのClassオブジェクトB.classをワイルドカードClass<? extends A<?>>を引数にしたメソッドにB.classを渡すとなぜかコンパイルエラーが発生します。
main.java:Java
1public class main{ 2 3 public void test(Class<? extends A<?>> c) { 4 5 } 6 7 public void main() { 8 //コンパイルエラー 9 test(B.class); 10 11 } 12}
(追記)コンパイルエラーの内容は以下です。
Java
1The method test(Class<? extends A<?>>) in the type main is not applicable for the arguments (Class<B>)Java(67108979)
なぜこういう挙動になるのかがいまいち理解できません。
どなたか教えていただけないでしょうか?
Bクラスにジェネリクスがついていようがいまいが、BクラスはA<T>クラスのサブクラスだと思うのですが…。
回答2件
あなたの回答
tips
プレビュー