0

したがって、任意の型オブジェクトを許可するには、コードでジェネリックを使用する必要があります。

このメソッドを書き直してそうしましたが、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のように比較可能であると定義しました

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 に答える