如何理解Java泛型的这种用法

时间:2012-11-13 07:58:21

标签: java generics

在我的学习书中,有这个例子:

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用于类型参数,但我怎么知道何时使用它?

3 个答案:

答案 0 :(得分:4)

你可以用它来租车,自行车...... 您可以像这样直接使用它:

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

然后当你getRental时,它会返回一个Car对象。 并且您将能够使用Car

放回returnRental(aCar);

或者您可以创建一个CarRentalRentalGeneric<Car>

同样的事情适用于您想租借的任何物品。

答案 1 :(得分:1)

T是泛型类型。它将在创建RentalGeneric类的对象时初始化。

RentalGeneric<Double> rgS =new RentalGeneric<Double>(10, new ArrayList<Double>());
RentalGeneric<Integer> rgS =new RentalGeneric<Integer>(10, new ArrayList<Integer>());

答案 2 :(得分:0)

您说得对,代码中没有T的直接定义。但是,可以在此代码之外的运行时找到它。确实在某处您创建了列表的实例。当你这样做时,你必须提供类型信息,例如

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

这里我们定义列表包含字符串。现在我们打电话给你的代码:

new RentalGeneric(123, mylist)

mylist是一个字符串列表,因此RentalGeneric的类型参数也是String