2 回答
TA贡献1804条经验 获得超2个赞
您收到此错误是因为您已声明:
BinarySearchTree<K extends Comparable<K>, V>
当您使用NGramas K 时,预计会实现Comparable<NGram>. 由于它没有实现,因此Comparable<NGram>您会收到错误消息。
编辑
有关此问题和解决方法的更多详细信息:
当超类实现时Comparable<SuperClass>,子类不能再次实现Comparable<SubClass>。这将意味着子类两次实现相同的通用类型。Java不允许。
Comparable<SuperClass>解决方法是也在子类中实现。在方法实现中,检查子类类型并进行处理。最好不要实现 `Comparable 你有一个类层次结构。相反,使用比较器。
因此,要在当前情况下解决您的问题,请声明BinarySearchTree以下方式以允许NGramas K:
BinarySearchTree<K extends Comparable<? super K>, V>
否则,摆脱Comparable并改用Comparator。请注意,如果没有上述更改,您可以在构建时使用BStringas因为它实现了.KBinarySearchTreeComparable<BString>
TA贡献1794条经验 获得超8个赞
您的类NGram实现Comparable<BString<Alphabet>>(继承自BString)。为了满足 的BinarySearchTree类型参数的边界要求K,它需要实现Comparable<NGram>,而不是。后者不是前者的子类型。
本质问题是 的BinarySearchTree要求过于严格。为了比较两个NGrams,它不需要那个类专门与它自己进行比较。它足以与它自己的任何超类相媲美。准确地说,这个概念可以这样表达:
public class BinarySearchTree<K extends Comparable<? super K>, V> extends ComparableDictionary<K, V> // ...
当然,这ComparableDictionary也可能需要放松。
添加回答
举报
