2012-04-01 50 views
9

我正在開發涉及泛型的類的項目。Java泛型問題:類「不在類型變量的範圍內」錯誤。

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的聲明中的課程班,我收到一個類型參數錯誤,指出「當然不是類型變量K的範圍內」。我花了很多時間試圖弄清楚課程可能缺乏什麼樣的特性,使得它不適合該法案,但空洞起來。

任何想法?

回答

11

MySearchTreeK的基本類型是Course。因此K必須「擴展」Comparable<Keyable<Course>> & Keyable<Course>。但它沒有,它擴展了Comparable<Keyable<DataElement>> & Keyable<DataElement>

我想DataElement應該以類似的方式被泛型到ComparableEnum

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 2012-04-01 22:07:33