【问题标题】:Trouble with Generics and extends泛型和扩展的问题
【发布时间】:2016-09-20 16:16:55
【问题描述】:

所以我有一些代码:

abstract class Node< T extends Comparable<T>, N extends Node<T, N> >
{ ...
}

那么我是否正确地说,当在此 Node 对象中使用类型 T 时,类型 T 必须具有可比较的属性?另外,N extends Node 只是意味着当在这个 Node 对象中使用类型 N 时,N 必须是具有 T 和 N 的属性的 Node?是的,这听起来令人费解,但我的解释是否正确?谢谢!

【问题讨论】:

  • 此定义无法编译。请更新它,因为您在某处缺少右括号。
  • 刚刚更新了编辑。你是这个意思吗?
  • 它仍然无法编译。
  • class Node&lt; T extends Comparable&lt;T&gt;, N extends Node&lt;T, N&gt; &gt; 是什么意思?
  • @Renato: class IntNode extends Node&lt;Integer, IntNode&gt;

标签: java generics inheritance extends


【解决方案1】:

是的,没错。但是......我解释说节点是一个像树节点一样的节点,对吧?不幸的是,将 N 用于比当前值(例如子级和父级的类型)更多的值是一个坏主意。

abstract class Node<T extends Comparable<T>, N extends Node<T, N>> {
  private Set<N> children = new LinkedHashSet<N>();
  private N parent = null;
  private T nodeValue = null;
}

在这种情况下,您将遇到Node&lt;Integer,?&gt;完整树 处于活动状态的问题。树中的每个节点都必须只包含整数,因为您递归地强制子节点和父节点只包含整数!

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多