interface A {
String n();
}
class B implements A {
@Override
public String n() { return "asdf"; }
}
interface C<T extends A> {
T m(T t);
}
class D implements C<B> {
@Override
public B m(B b) {
return b;
}
}
Class<C<? extends A>> x = D.class;
最後の行にエラーがあります
Type mismatch: cannot convert from Class<D> to Class<C<? extends A>>
これは私にはまったく問題ないように見えますが、タイプのワイルドカードがどのように機能するかについて微妙な点が欠けている可能性があります。最後の行のタイプを変更する方法はありますか? 後でこれを行う予定なので、この参照が必要です。
B b = new B();
A y = x.newInstance().m(b);
これにもエラーがあります
The method m(capture#1-of ? extends A) in the type C<capture#1-of ? extends A> is not applicable for the arguments (B)
ただし、ワイルドカードとキャプチャなしで使用すると、正常に動作します。
A z = D.class.newInstance().m(b);
残念ながら、今のところこれに固執しています。どんな助けもいただければ幸いです。
編集:削除されたthis.
参照
編集:xをに変更
Class<? extends C<? extends A>> x = D.class;
そしてそれは動作します。ただし、まだエラーが発生していますx.newInstance().m(b)
The method m(capture#2-of ? extends A) in the type Test.C<capture#2-of ? extends A> is not applicable for the arguments (B)