2012-11-15 28 views
5

Tại sao tôi nhận được lỗi trình biên dịch này trên FuzzyWuzzyContainer?Nhận lỗi biên dịch về thông số loại có nhiều giới hạn

ràng buộc không phù hợp: Loại FuzzyWuzzy không phải là một sự thay thế hợp lệ cho tham số bị chặn <T extends Fuzzy & Comparable<T>> loại FuzzyContainer

FuzzyWuzzy nào trong thực tế thực hiện cả hai giao diện được định nghĩa trong chung bị chặn .

public interface Fuzzy 
{ 
    boolean isFuzzy(); 
} 

public class FuzzyWuzzy implements Fuzzy, Comparable<Fuzzy> 
{ 
    public boolean isFuzzy() {return true;} 
    public int compare(Fuzzy o) {return 0;) 
} 

public abstract class FuzzyContainer<T extends Fuzzy & Comparable<T>> 
{ 
    : 
} 

public class FuzzyWuzzyContainer extends Fuzzycontainer<FuzzyWuzzy> // Error is here 
{ 
} 
+0

Bạn có muốn 'FuzzyWuzzy thực hiện Fuzzy, Comparable '? –

+0

Thật không may, không. – Robin

Trả lời

3

Hãy thử tuyên bố FuzzyContainer như thế này:

public abstract class FuzzyContainer<T extends Fuzzy & Comparable<? super T>> 

này là cần thiết vì FuzzyWuzzy cụ Comparable<Fuzzy> hơn Comparable<FuzzyWuzzy> (bạn cũng có thể thực hiện thay đổi đó, như The Cat pointed out).

+2

Cảm ơn bạn. Tôi có một dấu ấn bàn phím trên trán của tôi từ cố gắng để con số này ra ngày hôm qua mà bây giờ có thể mặc ;-) – Robin

4

Sự cố là FuzzyWuzzy implements Comparable<Fuzzy>. FuzzyContainer dự kiến ​​cả hai T s trong FuzzyContainer<T extends Fuzzy & Comparable<T>> là cùng loại. FuzzyWuzzy thực hiện Fuzzy nhưng không triển khai Comparable<FuzzyWuzzy>.

Cố gắng, FuzzyWuzzy implements Fuzzy, Comparable<FuzzyWuzzy>

+0

Câu trả lời hay, không may là câu trả lời đúng cho trường hợp sử dụng cụ thể của tôi. – Robin

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