Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何理解Java泛型的这种用法_Java_Generics - Fatal编程技术网

如何理解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

在实例化此类时使用它。