为什么我在 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
{
}
答案 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)。