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

Rob*_*bin 5 java generics

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

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

实际上,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
{
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*ora 3

尝试FuzzyContainer这样声明:

public abstract class FuzzyContainer<T extends Fuzzy & Comparable<? super T>>
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢。昨天我试图弄清楚这一点,我的额头上有一个键盘印记,现在可以消失了;-) (2认同)