如何理解Java泛型的这种用法
在我的学习书中,有这样一个例子:如何理解Java泛型的这种用法,java,generics,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 = rentalP
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);
}
}
import java.util.*;
公共类RentalGeneric{
私人列表租赁工具;
私有int-maxNum;
public RentalGeneric(int maxNum,List rentalPool){
this.maxNum=maxNum;
this.rentalPool=rentalPool;
}
公共租赁{
返回rentalPool.get(0);
}
公共空间归还租金(T归还物品){
RentalTool.add(返回的内容);
}
}
我觉得它编译起来很奇怪,因为没有
类的定义。这是什么故事?在我的书中说,T
用于类型参数,但我如何知道何时使用它?T在这里是泛型。它将在创建RentalGeneric
类的对象时初始化
RentalGeneric<Double> rgS =new RentalGeneric<Double>(10, new ArrayList<Double>());
RentalGeneric<Integer> rgS =new RentalGeneric<Integer>(10, new ArrayList<Integer>());
RentalGeneric rgS=new RentalGeneric(10,new ArrayList());
RentalGeneric rgS=new RentalGeneric(10,new ArrayList());
你可以用它来租汽车、自行车。。。
您可以像这样直接使用它:
RentalGeneric<Car> carRental = new RentalGeneric<Car>(10, aList);
RentalGeneric carRental=新RentalGeneric(10,10);
然后,当您执行getrent
时,它将返回一个Car
对象。
您还可以使用returnRental(aCar)归还汽车
代码>
或者您可以创建一个扩展RentalGeneric
的CarRental
类
同样的事情也适用于你想租的任何东西。你是对的,在你的代码中没有对T
的直接定义。但是,可以在运行时在此代码之外找到它。实际上,在某个地方您创建了列表的实例。当您这样做时,您必须提供类型信息,例如
List mylist=new ArrayList()代码>
在这里,我们定义列表包含字符串。现在我们称您的代码为:
new RentalGeneric(123,mylist)
mylist
是一个字符串列表,因此RentalGeneric
的类型参数也是String
。在实例化此类时使用它。