首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中m1和m2泛型方法的区别

Java中m1和m2泛型方法的区别
EN

Stack Overflow用户
提问于 2019-12-20 07:03:20
回答 1查看 68关注 0票数 1

有人能帮我理解一下m1()和m2()泛型方法的区别吗?

代码语言:javascript
复制
class C1 {
 <T extends Number> void m1(List<T> list){
        System.out.println(list);
        for (T t : list){
            System.out.println(t);

        }
    }

    void m2(List<? extends Number> list){
        for(Number n :list){

        }

    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-20 07:20:35

这两个代码片段在功能上没有区别。它们做同样的事情,同样灵活,具有相同的签名,并且基本上编译成完全相同的类文件。

第一个代码片段说:有一些类型;我们限制它为java.lang.Number或它的某个子类型。然后,这个类型出现了两次:一次是作为列表上的类型参数(所以,它是一个数字列表,或者是一个整数列表,或者是一个双精度列表,等等),另一次是当我们迭代列表中的每个元素时,作为变量的类型。关于for (T t : list)中的t变量,您所能说的就是它至少是java.lang.Number,但这就是您所知道的全部。

在第二个代码片段中,您可以说:我们有一个包含java.lang.Number或其任何子类型的列表。我们对这个列表所做的就是遍历它,这时可以声明,当您遍历这个列表时,您可以确定掉出来的项至少是一个java.lang.Number

在这两种情况下,循环变量(第一个代码段中的T t,第二个代码段中的Number n )被绑定为java.lang.Number,并且可以用作一个数字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59417961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档