【问题标题】:Difference between wildcard type vs bounded type [duplicate]通配符类型与有界类型之间的区别[重复]
【发布时间】:2016-11-08 11:45:13
【问题描述】:
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());
    }
}

与上述两种方法一样,都给出相同的结果。 谁能告诉我是否所有的工作都已经由有界类型完成,那么为什么会有通配符的概念?通配符是否有其他一些有界类型没有的工作?

【问题讨论】:

  • 在 Java 中,泛型只为您提供编译时安全和检查,仅此而已。在第一种情况下,您有一个 T 可以用来表示您的特定类型,在第二种情况下,您没有;就是这样。

标签: java


【解决方案1】:

我认为从您的示例的角度来看,使用通配符几乎没有什么好处。 不过,我相信引入通配符是为了支持使用相关类型参数对泛型类型进行赋值(或相关构造)。

考虑:

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

对比:

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

第二个 sn-p 是有效代码。

我同意,从方法参数类型的角度来看,通配符类型并没有特别明显的优势。

【讨论】:

    猜你喜欢
    • 2015-08-30
    • 2012-06-12
    • 2014-05-30
    • 2012-07-28
    • 1970-01-01
    • 2016-12-10
    • 2017-10-05
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多