簡體   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