我嘗試了下面的代碼,很少和泛型混淆。您能否提供以下方法中用'T'取代什麼值的信息?Java泛型中方法參數類型爲<? extends T>時T的值是多少?
代碼:
public class testT{
public static void main(String[] args){
List<Number> numbers1 = new ArrayList<>();
numbers1.add(5.4);
numbers1.add(2);
numbers1.add(44444444l);
getClass(numbers1);
}
static <T> void getClass(Collection<? extends T> collection) {
for(T c : collection) {
System.out.println(c.getClass().getName());
}
}
輸出:
java.lang.Double
java.lang.Integer
java.lang.Long
'T'會是'Number'。請注意,您實際上並不需要'T'來完成此代碼; '集合>'和'對象'將工作相同。此外,' extends T>'不是必需的,您可以等效地使用''。 –
它的數量,如你低音數字集合 – kism3t
@AndyTurner - 謝謝。我也認爲 extends T>這裏相當於。但是在理解compler如何派生T = Number的時候很難理解,即當收集的參數傳遞給Collection extends T>時,那麼我認爲這種情況可能會模棱兩可以找到T的值。 –