在具有多个边界的类型参数上获取编译错误

时间:2012-11-15 16:09:44

标签: java generics

为什么我在 FuzzyWuzzyContainer 上收到此编译器错误?

  

绑定不匹配:类型FuzzyWuzzy不是有效的替代品   该类型的有界参数<T extends Fuzzy & Comparable<T>>   FuzzyContainer

FuzzyWuzzy 实际上实现了有界泛型中定义的两个接口。

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
{
}

2 个答案:

答案 0 :(得分:4)

问题是FuzzyWuzzy implements Comparable<Fuzzy>FuzzyContainer期望T中的FuzzyContainer<T extends Fuzzy & Comparable<T>>个版本都是同一类型。 FuzzyWuzzy实现了Fuzzy,但它没有实现Comparable<FuzzyWuzzy>

尝试,FuzzyWuzzy implements Fuzzy, Comparable<FuzzyWuzzy>

答案 1 :(得分:3)

尝试像这样声明FuzzyContainer

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

这是必要的,因为FuzzyWuzzy实现Comparable<Fuzzy>而不是Comparable<FuzzyWuzzy>(您也可以进行更改,如The Cat pointed out)。