0

これが私のコードです:

import java.util.Collections;
import java.util.*;
public class ListMerge<String> extends LinkedList<String>
{
    public LinkedList<String> mergeLists(LinkedList<String> one, LinkedList<String> two)
    {
        LinkedList<String> newList = new LinkedList<String>(); 
        newList.addAll(one); 
        newList.addAll(two); 
        newList = Collections.sort(newList); 

        return newList; 
    }  
}

「シンボルが見つかりません - メソッド sort(java.util.LinkedList) というエラーが表示されますが、それが機能しない理由がまったくわかりません。コレクション クラスをインポートし、呼び出したインライン コーディングでコレクションなので、メソッドが見つからないように見える理由がわかりません。

私はコーディングの初心者なので、コーディングの語彙はあまり強くないので、対応してください!

ありがとうございました!

4

3 に答える 3

0

に変更した後の問題java.util.Collectionsは次のとおりです

                                                  v this is a type argument
public class ListMerge<String> extends LinkedList<String>
                       ^ this is a type parameter

あなたが持っている型パラメータListMerge<String>、すなわち。<String>パラメータの単純な名前です。とは関係ありませんjava.lang.String。そのため、 typeを覆い隠していますjava.lang.String

これは、実際には最初に望んでいたものかもしれません。ListMergeと同等のすべてのタイプの作業を計画しました

public class ListMerge<T> extends LinkedList<T>

そうでない場合、あなたが望むのは

public class ListMerge extends LinkedList<String>

ジェネリック クラス宣言の構文の詳細については、公式の Java ジェネリック チュートリアルを参照してください。

于 2013-10-20T20:13:21.287 に答える
0

LinkedList を拡張する場合は、ジェネリック クラス「LinkedList を拡張する必要があります...指定されたタイプのジェネリック クラスのバージョンを拡張することはできません:「LinkedList」。ジェネリック クラスのテンプレート引数のみを指定します」たとえば、インスタンスをインスタンス化するときに「文字列で」

LinkedList<String> list = new LinkedList<String>()

ただし、LinkedList オブジェクトを返すメソッド「mergeLists」を持つ ListMerger クラスを使用する方が簡単だと思うかもしれません。

public class ListMerger<E extends Comparable>
{
    public LinkedList<E> mergeLists(LinkedList<E> one, LinkedList<E> two)
    {
        LinkedList<E> newList = new LinkedList<E>(); 
        newList.addAll(one); 
        newList.addAll(two); 
        Collections.sort(newList);

        return newList; 
    }  
}

他の人が述べたように、はい、Collections.sort メソッドは入力したリストを変更します。ソートされたコピーは返しません。だから、私のコードでそれをどのように行ったかを見てください。次に、マージされた LinkedList を取得するために必要なことは次のとおりです。

ListMerger<String> merger = new ListMerger<String>();
LinkedList<String> mergedList = merger.mergeLists(one, two);

ジェネリック クラスを使用しているときに "String" を指定したことに注意してください。それを定義していません。おっと、名前を ListMerge から ListMerger に変更したことに注意してください。個人的な好みだと思います。

編集: E が「同等」であることを要求するように例を更新しました。そうすれば、 Collections.sort() はそれを受け入れます。

于 2013-10-20T19:35:05.590 に答える