2012-04-01 34 views
9

मैं कक्षा के लिए एक परियोजना पर काम कर रहा हूं जिसमें जेनेरिक शामिल है।जावा जेनेरिक मुद्दा: कक्षा "प्रकार-चर के सीमाओं के भीतर नहीं" त्रुटि।

public interface Keyable <T> {public String getKey();} 

public interface DataElement extends Comparable<Keyable<DataElement>>, Keyable<DataElement>, Serializable {...} 
public class Course implements DataElement {...} 


public interface SearchTree<K extends Comparable<Keyable<K>> & Keyable<K>> extends Serializable {...} 
public class MySearchTree implements SearchTree<Course> { 
... 
    private class Node { 
     public Course data; 
     public Node left; 
     public Node right; 
     ... 
    } 
} 

जब MySearchTree की घोषणा के भीतर कोर्स वर्ग का उपयोग करने की कोशिश कर रहा है, मैं एक प्रकार तर्क करते हुए कहा कि "पाठ्यक्रम के प्रकार-चर कश्मीर सीमा के भीतर नहीं है" त्रुटि प्राप्त करते हैं। मैंने यह समझने की कोशिश की कि कितने विशेषताओं में कमी हो सकती है, इस बिल को फिट करने के लिए पाठ्यक्रम की कमी हो सकती है, लेकिन खाली हो गई।

कोई विचार?

उत्तर

11

MySearchTreeK आधार प्रकार के Course है। तो K को Comparable<Keyable<Course>> & Keyable<Course> "विस्तार" करना होगा। लेकिन ऐसा नहीं है, यह Comparable<Keyable<DataElement>> & Keyable<DataElement> फैलाता है।

मैं DataElementComparable या Enum को एक समान तरीके से generified किया जाना चाहिए लगता है।

public interface Keyable <T> {public String getKey();} 

public interface DataElement<THIS extends DataElement<THIS>> extends Comparable<Keyable<THIS>>, Keyable<THIS>, Serializable {...} 
public class Course implements DataElement<Course> {...} 


public interface SearchTree<K extends Comparable<Keyable<K>> & Keyable<K>> extends Serializable {...} 
public class MySearchTree implements SearchTree<Course> { 
+1

वाह, एक टन धन्यवाद। आपने मुझे घंटे के सिरदर्द बचाए हैं। – SamWN