में "सुपर" कीवर्ड के साथ क्या गलत है, मुझे मेरी परियोजना में एक अजीब समस्या का सामना करना पड़ा। अब मैं इस समस्या को सरल बनाया और यहाँ एक छोटा सा उदाहरण लिखा मेरा भ्रम वर्णन करने के लिए किया है:जावा जेनेरिक प्रकार
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>>
है, जो सामान्य प्रकार के भीतर एक सामान्य प्रकार है।
@ एंडी टर्नर "सबकुछ मेल खाता है? सुपर क्यू 2" तो क्यों 'question.f (in1)' त्रुटि है? क्या आप और साफ़ कर सकते हैं? – Jerry06
@ जेरी06 मुझे लगता है कि मैंने इस सवाल का गलत व्याख्या किया था। फिर से खोल दी। –