在我的学习书中,有这个例子:
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
用于类型参数,但我怎么知道何时使用它?
答案 0 :(得分:4)
你可以用它来租车,自行车...... 您可以像这样直接使用它:
RentalGeneric<Car> carRental = new RentalGeneric<Car>(10, aList);
然后当你getRental
时,它会返回一个Car
对象。
并且您将能够使用Car
returnRental(aCar);
或者您可以创建一个CarRental
类RentalGeneric<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
。