我最近开始实施一些数据结构,而且,我正在努力使所有内容成为可扩展的'尽可能。
public abstract class AbstractNode<E extends Element, U extends AbstractNode<E, U>> { ... }
public class BinarySearchTree<Element> extends Tree<Element, Node<Element>> { ... }
public class Element implements Cloneable { ... }
public class Node<E extends Element> extends AbstractNode<E, Node<E>> { ... }
public abstract class Tree<E extends Element, T extends AbstractNode<E, T>> { ... }
我在BinarySearchTree
课程中收到了很多错误消息Bound mismatch: The type Element is not a valid substitute for the bounded parameter <E extends Element> of the type Node<E>
。为什么!?我在那里做错了什么?
此外,在BinarySearchTree类中,我在The type parameter Element is hiding the type Element
中获得BinarySearchTree<Element>
权限。
Ty的帮助!
答案 0 :(得分:4)
BinarySearchTree
的定义是:
public class BinarySearchTree<Element> extends Tree<Element, Node<Element>>
此处,Element
是类型参数,但不是实际类型Element
。它和你一样几乎一样:
public class BinarySearchTree<T> extends Tree<T, Node<T>>
现在你得到的错误更有意义:
T
类型不能替代<T extends Element>
类型的有界参数Node<T>
这是合理的,因为参数T
没有上限Element
,这是Node
定义所要求的。这可以通过以下方式轻松解决:
public class BinarySearchTree<T extends Element> extends Tree<T, Node<T>>
请注意,在这里,上限不是类型参数,而是实际类型(Element
)。
根据经验,您应该避免命名类型参数,如现有类型,因为可能会发生很多混乱。类型参数名称通常由单个大写字母组成。如果你遵循这种做法,最终会遇到类似的问题。