Java Generic类型:List<?之间的差异extends Number>和列表< T extends Number> [英] Java Generic type : difference between List <? extends Number> and List <T extends Number>

查看:168
本文介绍了Java Generic类型:List<?之间的差异extends Number>和列表< T extends Number>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Java Generic类型:有什么区别

Java Generic type : what is the difference between

(1) List <? extends Number>   
(2) List <T extends Number>

根据我的理解

(1 )列表<? extends Number> 是具有超类Number的
Readonly List ofunknown数据类型。我们只能读取元素但不能添加

(1) List <? extends Number> is the Readonly List of "unknown" data type with super class "Number". we can read the element only but can not add

(2)列表< T extends Number>
超类数字的数据类型列表。我们可以读取并添加元素到列表中

请参阅下面的代码示例

class TestGen{

        public static void main(String[] args) {

        double result = 0.0;

        List<Integer> intList = new ArrayList<Integer>();
        intList.add(10);
        intList.add(20);
        intList.add(30);

        result = TestGen.sumOfList1(intList);
        System.out.println("Result=" + result); 

        result = TestGen.sumOfList2(intList);
        System.out.println("Result=" + result); 
    }

    public static double sumOfList1(List<? extends Number> list) {
        double s = 0.0;
        for (Number n : list)
            s += n.doubleValue();
        return s;
    }


    public static <T extends Number> double sumOfList2(List<T> list) {

        double s = 0.0;

        // -- --------------------------------------------------------- 
        // getting error while trying to add new element 
        // list<T> is not applicable for argument(Integer) : Why ?
        list.add(new Integer(40));                      

        for (Number n : list)               
            s += n.doubleValue();

        return s;
    }
}

当我尝试添加整数时(或者甚至数字对象)进入sumOfList2然后得到错误。请解释这里有什么问题?

When I am trying to add the Integer (or even Number object) into the sumOfList2 then getting the error. Please explain what is wrong here ?

推荐答案

基本区别在于你使用 T extends Number 那么你可以参考类型 T

例如: list.add((T)new Integer (40));

如果您使用?扩展数然后你不能引用类型,但你仍然可以说((List< Integer>)列表).add((int)s);

Basic difference is if you use T extends Number then you can refer to the type T
For example: list.add((T) new Integer(40));
Where as if you use ? extends Number then you can't refer to the type, but you can still say ((List<Integer>)list).add((int) s);

这篇关于Java Generic类型:List&lt;?之间的差异extends Number&gt;和列表&lt; T extends Number&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆