私のプロジェクトで奇妙な問題が発生しました。今私は、問題を単純化し、私の混乱を示すために、ここで小さな例を書かれている:Javaジェネリックタイプの "super"キーワードの問題
public class Question {
class Q1 {}
class Q2 extends Q1 {}
interface In<T> {
void f(T t);
}
List<Q2> list;
void f(In<? super List<? super Q2>> in) {
in.f(list);
}
static void g() {
Question question = new Question();
In<Collection<Q1>> in1 = new In<Collection<Q1>>() {
@Override
public void f(Collection<Q1> o) {}
};
In<List<Q2>> in2 = new In<List<Q2>>() {
@Override
public void f(List<Q2> o) {}
};
question.f(in1); //Error!
question.f(in2); //Error!
}
}
私の目的は、方法f(In<? super List<? super Q2>>)
をより柔軟にすることです。このメソッドにはin1
またはin2
を渡すことができます。しかしどちらも通過できません!なにが問題ですか?
多分this answerが意味をなさないでしょう。しかし、私の質問は違う!私のジェネリックタイプはIn<? super List<? super Q2>>
で、ジェネリックタイプのジェネリックタイプです。
@AndyTurner「すべてが一致しますか?スーパーQ2」なぜ 'question.f(in1)'がエラーなのですか?もっとクリアできますか? – Jerry06
@ Jerry06私は質問を誤解したと思う。再オープン。 –