绑定不匹配:该类型不是有界参数的有效替代

时间:2015-06-10 12:23:40

标签: java oop generics

我最近开始实施一些数据结构,而且,我正在努力使所有内容成为可扩展的'尽可能。

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的帮助!

1 个答案:

答案 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)。

根据经验,您应该避免命名类型参数,如现有类型,因为可能会发生很多混乱。类型参数名称通常由单个大写字母组成。如果你遵循这种做法,最终会遇到类似的问题。