繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM