0

因此,为了允许任何类型对象,我必须在我的代码中使用泛型。

我已经重写了这个方法,但是当我创建一个对象时,例如 Milk,它不会让我将它传递给我的方法。

以太我的通用修订版有问题,或者我创建的 Milk 对象不好。

我应该如何正确传递我的对象并将其添加到链表?

这是一种在我插入项目时会导致错误的方法:

   public void insertFirst(T dd)  // insert at front of list
   {
      Link newLink = new Link(dd);   // make new link

      if( isEmpty() )                // if empty list,
         last = newLink;             // newLink <-- last
      else
         first.previous = newLink;   // newLink <-- old first
      newLink.next = first;          // newLink --> old first
      first = newLink;               // first --> newLink
   }

这是我尝试插入链表的课程:

class Milk
{
    String brand;
    double size;
    double price;

    Milk(String a, double b, double c)
    {
        brand = a;
        size = b;
        price = c;
    }
}

这是插入数据的测试方法:

   public static void main(String[] args)
      {                             // make a new list
      DoublyLinkedList theList = new DoublyLinkedList();

      // this causes:
      // The method insertFirst(Comparable) in the type DoublyLinkedList is not applicable for the arguments (Milk)
      theList.insertFirst(new Milk("brand", 1, 2));      // insert at front

      theList.displayForward();     // display list forward
      theList.displayBackward();    // display list backward
      }  // end main()
   }  // end class DoublyLinkedApp

声明:

class Link<T extends Comparable<T>>
   {}

class DoublyLinkedList<T extends Comparable<T>>
   {}
4

3 回答 3

4

根据您定义T为 Comparable的错误

public class DoublyLinkedList<T extends Comparable<T>> {

但是您要添加一种不可比较的类型。目前尚不清楚为什么您的课程需要具有可比性,因为您似乎没有在插入方法中使用它,所以我会放弃要求。

public class DoublyLinkedList<T> {

如果您要复制 JDK 中的类的功能,我建议您通过阅读其源代码来了解它的工作原理。

http://www.docjar.com/html/api/java/util/LinkedList.java.html

于 2012-10-20T16:58:38.453 回答
1

您必须像这样实例化您的列表:

DoublyLinkedList<Milk> theList = new DoublyLinkedList<Milk>();

而我差点忘了...

Milk implements Comparable<Milk>
于 2012-10-20T16:58:02.893 回答
1

好吧,你Milk的还不够好 - 但这还不是全部。
它应该是 :

class Milk implements Comparable<Milk>

(你需要实现这个接口)。

此外:

Link newLink = new Link(dd);   

DoublyLinkedList theList = new DoublyLinkedList();

是类型DoublyLinkedList<Object>(它们是原始类型) - (并且相同Link<Object>)与所需类型不可比较(Object不是Comparable<Object>

所以你应该这样做才能修复它:

  1. 确保Milk实现Comparable<Milk>
  2. 声明你的变量并将它们初始化为泛型类型:DoublyLinkedList<Milk>Link<T>

另一种选择(对于 1)-如果您不需要该Comparable功能-只需将它们都声明为:

class DoublyLinkedList<T>
class Link<T>
于 2012-10-20T17:00:42.590 回答