मैं एक सामान्य जावा वर्ग है कि दुकानों comparables:जेनेरिक जावा वर्ग है कि संग्रहीत करता comparables
public class MyGenericStorage<T extends Comparable<T>> {
private T value;
public MyGenericStorage(T value) {
this.value = value;
}
//... methods that use T.compareTo()
}
मैं भी व्यक्ति कहा जाता है एक अमूर्त वर्ग है:
public abstract class Person implements Comparable<Person>
और दो ठोस उपवर्गों, प्रोफेसर और छात्र :
public class Professor extends Person
public class Student extends Person
अब जब मैं एक MyGenericStorage बनाना चाहता हूं, तो मुझे एक त्रुटि मिलती है:
//error: type argument Student is not within bounds of type-variable T
MyGenericStorage<Student> studStore = new MyGenericStorage<Student>(new Student());
//this works:
MyGenericStorage<Person> persStore = new MyGenericStorage<Person>(new Student());
मुझे लगता है कि ऐसा इसलिए है क्योंकि मुझे जेनेरिक समझने में मौलिक समस्या है। क्या कोई मुझे यह समझा सकता है, और यह भी, इसे कैसे ठीक किया जाए?
संपादित करें:
मैं निम्नलिखित करने के लिए MyGenericStorage बदल गए हैं:
public class MyGenericStorage<T extends Comparable<? super T>>
और अब यह काम करने के लिए लगता है। क्या कोई समझा सकता है क्यों?
क्या होगा यदि आप इसे 'पब्लिक क्लास में बदलते हैं तो छात्र व्यक्ति के लागू करता है तुलनात्मक'? –