9

Java の使用: 人々の時間を無駄にしてここに投稿したくなかったのですが、私のグーグル スキルではうまくいかず、答えが見つかりません。私はいくつかの提供されたコードを調べていましたが、彼らは使用しました

public static <E> void printTree(TwoFourTree<E> tf)

(参考までに、赤黒ツリーから 2-4 ツリーに変換しています)。私が最初にこの問題に取り組んだとき、代わりに を使用し、 の最初のメソッド宣言に含めることさえしませんでしpublic static voidた。しかし、私は問題に遭遇し、他の場所ではなく<E>使用しているにもかかわらず、これを投げることですべての問題が解決しました.<Integer><E>

だから私の質問は、誰かが私に正確に何をするのか説明してもらえます<E>

public static <E> void
4

3 に答える 3

3

これはGenericsとして知られる Java 機能です。

なぜジェネリックを使用したいのですか?以下は、それらが役立つシナリオの 1 つです。「悪い昔」に戻って、任意のオブジェクトで動作するクラスが必要な場合は、オブジェクトの観点からすべてのインターフェイスを宣言する必要がありました。

public class MySuperList
{
    public void Add(object a) { }
}

ただし、型安全性が得られないため、これは最悪です。次のようなコードを記述できます。

// Your code
MySuperList list = new MySuperList();
cars.Add(new Car("Ford Mondeo"));// Works
cars.Add(new Fish("Herring")); // Works - which is a shame as a Fish is not a car!

ジェネリックは、クラスを厳密に型指定できるようにすることでこれを修正しますが、ジェネリックな方法で行います。例えば:

public class MySuperList<T>
{
    // Add method will only accept instances of type T.
    public void Add(T a) { }
}

// Your code
MySuperList<Cars> list = new MySuperList<Cars>();
cars.Add(new Car("Ford Mondeo"));// Works
cars.Add(new Fish("Herring")); // Compile-time error.
于 2012-10-31T16:00:39.513 に答える
0

書く代わりに

public static Integer ...
public static Double ...
public static Long ...

...

ジェネリック メソッドを作成するだけです

public static <E> 
于 2012-10-31T16:00:19.443 に答える
0

ジェネリック メソッドを作成します。つまり、TwoFourTree任意のタイプのオブジェクトを保持する a を引数として使用できます (この場合)。

たとえば、TwoFourTreetype のオブジェクトを保持する のみを受け入れたいList場合は、メソッドを次のように定義します。

public static <E extends List> void ...

Numberオブジェクト(など)だけが必要な場合は、IntegerそうしますDouble

public static <E extends Number> void ...

これが、そのようなメソッドを作成することが実際に役立つ理由です。楽しみはそこで終わらないことを指摘しておく必要があります。たとえば、複数の型パラメーターを使用して同じことを行うことができます。

public static <T, S extends Number> void ...

詳細を知りたい場合は、ジェネリック メソッドに関するこのチュートリアルを読むと役立つと思います。

于 2012-10-31T15:56:51.987 に答える