私がtestSuper()メソッドを呼び出せない理由をundestandしてください。コンパイルエラー:パラメータとしてextendとsuperを持つ無限のワイルドカード
The method testSuper(Group<? super BClass<?>>) in the type Group <BClass<String>> is not applicable for the arguments (Group<AClass<String>>)
しかし、testExtends()メソッドはOKです。しかし、それは同じように見えます。
class AClass<T> {}
class BClass<T> extends AClass<T> {}
class Group<T> {
T name;
public void testExtends(Group<? extends AClass<?>> value){}
public void testSuper(Group<? super BClass<?>> value){}
public T getName(){return name;}
}
public class GenericTest {
public static void GenericTestMethod(){
Group<AClass<String>> instGrA = new Group<AClass<String>>();
Group<BClass<String>> instGrB = new Group<BClass<String>>();
//OK
instGrA.testExtends(instGrB);
//The method testSuper(Group<? super BClass<?>>) in the type Group <BClass<String>>
//is not applicable for the arguments (Group<AClass<String>>)
instGrB.testSuper(instGrA);
}
}
あなたの答えのおかげで、しかし、どのようなコールinstGrB.testSuper(instGrB)場合は? BClassは、BClass >のタイプです。 –
私の変更に伴い、その行がコンパイルされるようになりました。 – rgettman
yes、それはコンパイルされます:) BClassがBClass >のタイプであれば、質問がinstGrB.testSuper(instGrB)でコンパイルされないのはなぜですか?それとも? –