このプログラムはコンパイルされません:
public class xx {
static class Class1<C> {
void method1(C p) {
}
}
static class Class2<T> extends Class1<Class<? extends T>> {
T object;
void method2() {
this.method1(this.object.getClass());
}
}
}
エラーは次のとおりです。
xx.java:10: method1(java.lang.Class<? extends T>) in xx.Class1<java.lang.Class<? extends T>>
cannot be applied to (java.lang.Class<capture#215 of ? extends java.lang.Object>)
this.method1(this.object.getClass());
なぜこれが起こるのですか?なぜコンパイラはそれがではなくobject.getClass()
戻ると信じているように見えるのですか?Class<? extends Object>
Class<? extends T>