2012-04-01 30 views
9

Tôi đang làm việc trên một dự án cho lớp học liên quan đến Generics.Vấn đề về Generics Java: Lỗi "không nằm trong giới hạn kiểu biến".

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; 
     ... 
    } 
} 

Khi cố gắng sử dụng lớp học trong khai báo MySearchTree, tôi nhận được lỗi đối số loại cho biết "Khóa học không nằm trong giới hạn của loại biến K". Tôi đã dành rất nhiều thời gian để cố gắng tìm ra những thuộc tính nào mà Khóa học có thể thiếu để làm cho nó không phù hợp với dự luật, nhưng lại trống rỗng.

Bất kỳ ý tưởng nào?

Trả lời

11

Trong MySearchTree các K loại cơ sở là Course. Vì vậy, K phải "mở rộng" Comparable<Keyable<Course>> & Keyable<Course>. Nhưng nó không, nó mở rộng Comparable<Keyable<DataElement>> & Keyable<DataElement>.

Tôi đoán DataElement nên được generified trong một cách tương tự như Comparable hoặc Enum.

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

Chà, cảm ơn một tấn. Bạn vừa tiết kiệm cho tôi nhiều giờ đau đầu. – SamWN

Các vấn đề liên quan