5

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

<T extends Fuzzy & Comparable<T>>Bound mismatch:FuzzyWuzzy 类型不是 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
{
}
4

2 回答 2

4

问题是FuzzyWuzzy implements Comparable<Fuzzy>FuzzyContainer期望两个Ts in是FuzzyContainer<T extends Fuzzy & Comparable<T>>同一类型。FuzzyWuzzy实现Fuzzy但它没有实现Comparable<FuzzyWuzzy>

尝试,FuzzyWuzzy implements Fuzzy, Comparable<FuzzyWuzzy>

于 2012-11-15T16:13:42.087 回答
3

尝试FuzzyContainer这样声明:

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

这是必要的,因为FuzzyWuzzy实现Comparable<Fuzzy>而不是Comparable<FuzzyWuzzy>(你也可以做出改变,正如猫指出的那样)。

于 2012-11-15T16:17:10.037 回答