泛型

泛型

为什么可以

public <T extends Number> void printValue(T t){}

public void printValue(List<? extends Goods> goods){}

不能
public List<? extends Goods> void printValue(List goods){}

上面两个方法的区别在哪里?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小尤 2021-01-29 15:37:58

同学你好,1、泛型方法的意义
   1) 首先同学可以先了解泛型类和泛型方法

        泛型类:是在实例化类的时候指明泛型的具体类型。泛型方法:是在调用方法的时候指明泛型的具体类型。

    2) 泛型类在实例化的时候需要指明类型,如果想换一种类型,就需要重新new一次,就不够灵活。而使用泛型方法可以在调用的时候指明类型,更加灵活。从而避免了泛型类的弊端,这就是泛型方法的意义。如下图所示:

http://img1.sycdn.imooc.com//climg/6013b94b09446c1e04560180.jpg

http://img1.sycdn.imooc.com//climg/6013bb19098d6f7805430201.jpg

3、泛型的意义:

    1) 保障类型安全,泛型的主要目标是实现java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型,

    2) 消除了强制类型转换 使得代码可读性好,减少了很多出错的机会

    3) Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

祝学习愉快!

好帮手慕小尤 2021-01-28 19:28:45

同学你好,1、List<? extends Goods>代表的是返回值类型是List类型,而void和List都是返回值类型,所以List无法与void共同存在,从而出现编译性异常。同学可去除void然后添加返回值即可。

http://img1.sycdn.imooc.com//climg/60129d9d0992894007590113.jpg

2、区别:

    public <T extends Number> void printValue(T t)是自定义泛型方法,代表就是该方法可以传入任意类型的数据。

    public void printValue(List<? extends Goods> goods)是将泛型作为参数,如果参数为多个子类,可以使用( List<? extends 父类>xx )。这种情况下,在调用方法时,就可以传递父类及其子类作为参数了。

祝学习愉快!

  • public <T extends Number> void printValue(T t){}

    public void printValue(Number t){}
    有区别吗?都是可以传入Number的子类作为参数,如果没区别,那自定义泛型方法的意义是啥


    2021-01-28 21:58:12
  • 同学你好,在编译后两者是没有区别的,不过泛型方法是在调用方法的时候指明泛型的具体类型。如果泛型类要在实例化的时候就指明类型,并想换一种类型,此时就不得不重新new一次,可能不够灵活;而泛型方法可以在调用的时候指明类型,更加灵活。

    祝学习愉快!

    2021-01-29 10:38:19
  • 能不能举例讲一下“不过”后面的内容,没看懂

    2021-01-29 10:55:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师