このJavaジェネリックの使用を理解する方法

How to understand this use of Java generics


質問 written by Roman C @2012-11-13 20:14:47Z

: 6 : 3 : 97

私の学習帳には、この例があります:

import java.util.*;
public class RentalGeneric<T> {

  private List<T> rentalPool;

  private int maxNum;
  public RentalGeneric(int maxNum, List<T> rentalPool) {

  this.maxNum = maxNum;
  this.rentalPool = rentalPool;
}
public T getRental() {
  return rentalPool.get(0);
}
  public void returnRental(T returnedThing) {
    rentalPool.add(returnedThing);
  }
}

Class<T>定義がないため、コンパイルするのがおかしいと思います。 これについての話は何ですか? 私の本では、 TはtypeパラメーターをTていると書かれていますが、それをいつ使うべきかを知るにはどうすればよいですか?

コメント 1

このクラスをインスタンス化するときに使用します。

written by ロヒトジャイン @2012-11-13 07:59:36Z

回答 1 written by Michael Laffargue @2012-11-13 08:02:08Z
4

あなたは車、自転車を借りるためにそれを使用することができます...あなたはこのように直接使用することができます:

RentalGeneric<Car> carRental = new RentalGeneric<Car>(10, aList);

その後、 getRental実行すると、 Carオブジェクトが返されます。 そして、 returnRental(aCar); Carを戻すことができますreturnRental(aCar);

または、 RentalGeneric<Car>拡張するCarRentalクラスを作成できます。

同じことが、レンタルしたいオブジェクトに当てはまります。

回答 2 written by Subhrajyoti Majumder @2012-11-13 08:00:17Z
1

Tはここでは汎用タイプです。 RentalGenericクラスのオブジェクトの作成中に初期化されます。

RentalGeneric<Double> rgS =new RentalGeneric<Double>(10, new ArrayList<Double>());
RentalGeneric<Integer> rgS =new RentalGeneric<Integer>(10, new ArrayList<Integer>());
回答 3 written by AlexR @2012-11-13 08:03:08Z
0

あなたは正しい、あなたのコードにTの直接の定義はありません。 ただし、実行時にこのコード外で見つけることができます。 実際、どこかでリストのインスタンスを作成します。 それを行うとき、タイプ情報を提供する必要があります。例えば

List<String> mylist = new ArrayList<String>();

ここで、リストに文字列が含まれることを定義しました。 次に、コードを呼び出します。

new RentalGeneric(123, mylist)

mylistは文字列リストなので、 RentalGenericのtypeパラメーターもStringです。