2016-11-08 10 views
1
public static void main(String args[]) { 
    List<Double> doubleList = new ArrayList<>(); 
    doubleList.add(new Double(101.215D)); 
    doubleList.add(new Double(102.215D)); 
    doubleList.add(new Double(103.215D)); 

    printIntValue1(doubleList); 
    System.out.println("*******"); 
    printIntValue2(doubleList); 
} 


//bounded parameter 
public static <T extends Number> void printIntValue1(List<T> list){ 
    for(T num : list){ 
     System.out.println(num.intValue()); 
    } 
} 
//Wildcard parametr 
public static void printIntValue2(List<? extends Number> list){ 
    for(Number num : list){ 
     System.out.println(num.intValue()); 
    } 
} 

上記の2つの方法と同様に、どちらも同じ結果が得られます。 誰もが、すべての作業が既に有界型で行われている場合、なぜワイルドカードの概念がそこにあるのかを教えてもらえますか?ワイルドカードは、有界型ではない他のいくつかの作業を行いますか?ワイルドカード型と有界型の違い

+0

Javaの場合、ジェネリックはコンパイル時の安全性と検査のみを提供します。第1のケースでは、特定のタイプを表すために使用できる 'T'があります。第2のタイプではそうではありません。それで全部です。 – vaxquis

答えて

1

あなたの例の観点からは、ワイルドカードを使用することで得られる利益はほとんどないと思います。しかし、私は、関連する型パラメータを使ってジェネリック型の代入(または関連するコンストラクト)をサポートするためにワイルドカードが導入されたと信じています。

は考えてみましょう:に

List<Number> numberList = new ArrayList<Double>(); //Won't compile 

コントラストていること:

List<? extends Number> anyNumberList = null; 
anyNumberList = new ArrayList<Double>(); 
anyNumberList = new ArrayList<Integer>(); 

二スニペットは有効なコードです。

私は、メソッドのパラメータ型の観点から見ると、ワイルドカード型にはかなりの利点がないことに同意します。

関連する問題