【问题标题】:Implementing Comparable with a generic doubly linked list使用通用双向链表实现 Comparable
【发布时间】:2012-04-12 01:22:54
【问题描述】:

我正在编写一个双向链表,当添加从我的类“家具”扩展的对象时,使用 compareTo 方法对它们进行排序。

我的列表和节点代码:

class Node<E extends Comparable<E>> { ....... }


class DList<E extends Comparable<E>>
{

[..]

    public void add(E c)
    {
        Node<E> finger = head;
        while (finger != null && ((finger.value().compareTo(c)) > 0))
            finger = finger.Next();

    }
}

我的 compareTo 方法位于家具类的子类中,例如:

class Chair extends Furniture
{


[.....]

    public int compareTo(Chair c)
    {
    if(this.getStyle().equals(c.getStyle()))
        return this.getColor().compareToIgnoreCase(c.getColor());
    return this.getStyle().compareToIgnoreCase(c.getStyle());
    }


}

然后我尝试通过

列出我的清单
    DList<Furniture> DD = new DList<Furniture>();

我收到错误:类型参数家具不在类型变量 E 中

【问题讨论】:

  • 附注为获得最佳效果,请使用 &lt;E extends Comparable&lt;? super E&gt;&gt;

标签: java list generics


【解决方案1】:

确保Furniture 实现Comparable&lt;Furniture&gt;

【讨论】:

  • Chair 需要实现int compareTo(Furniture f) 才能匹配。
  • 不,如果Furniture实现了Comparable,那么该类已经有一个compareTo方法,而Chair类将继承这个compareTo方法。
  • 其实Chair需要实现Comparable&lt;Chair&gt;,但前提是他需要实例化一个DList&lt;Chair&gt;
  • 是的,但这里不是这种情况,因为 op 想要创建家具的 DList。
【解决方案2】:

也许你的Forniture 类没有实现Comparable&lt;Forniture&gt;

【讨论】:

    【解决方案3】:

    您的家具类应该是抽象的并且应该扩展 Comparable,您的椅子类应该实现您的家具类。

    另一种方法是让您的 Furniture 类实现 Comparable。

    【讨论】:

      【解决方案4】:

      &lt;E extends Comparable&lt;E&gt;&gt; 表示 E 必须扩展 Comparable&lt;E&gt;,因此请确保 Furniture 扩展 Comparable。

      【讨论】:

        猜你喜欢
        • 2021-11-18
        • 2011-06-03
        • 2013-10-29
        • 2016-06-10
        • 2018-03-14
        • 1970-01-01
        • 2019-08-16
        • 2014-07-01
        相关资源
        最近更新 更多