[英]How to understand this use of 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
是类型参数,但我怎么知道何时使用它?
你可以用它来租车,自行车......你可以像这样直接使用它:
RentalGeneric<Car> carRental = new RentalGeneric<Car>(10, aList);
然后,当你做getRental
它会返回一个Car
对象。 你将能够用returnRental(aCar);
放回一辆Car
returnRental(aCar);
或者你可以创建一个扩展RentalGeneric<Car>
的CarRental
类。
对于您想要租用的任何物品,情况也是如此。
T是泛型类型。 它将在创建RentalGeneric
类的Object时初始化。
RentalGeneric<Double> rgS =new RentalGeneric<Double>(10, new ArrayList<Double>());
RentalGeneric<Integer> rgS =new RentalGeneric<Integer>(10, new ArrayList<Integer>());
你是对的,代码中没有直接的T
定义。 但是,可以在此代码之外的运行时找到它。 确实在某处您创建了列表的实例。 当你这样做时,你必须提供类型信息,例如
List<String> mylist = new ArrayList<String>();
这里我们定义列表包含字符串。 现在我们调用您的代码:
new RentalGeneric(123, mylist)
mylist
是一个字符串列表,所以RentalGeneric
的类型参数也是String
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.