泛型类和泛型方法看起来似乎可以实现类似的功能,但是很多人并未真正掌握泛型方法,网上很多文章说了很多还是似是而非,特别是初学者还是搞不明白。

一.关于泛型方法

1.泛型方法可以独立于泛型类

2.泛型方法等效于泛型类里泛型参数方法,实际上也还是泛型方法。

我觉得造成这个混乱是Java学界翻译的一点问题,或者说是疏忽了这一点。

应该分为:非泛型类中的泛型方法泛型类中的泛型方法

代码一 泛型类Generic:

泛型类有一个带泛型参数的方法listAdd,有2个入参一个泛型数组,一个泛型List。

功能很简单就是把数组元素添加到List里,返回泛型List。

实际上你用非泛型类的泛型方法的写法加一对菱形表达式<>也没错,但是编译器会给你提示:参数类型T隐藏类型参数T。

下面是非泛型类中的泛型方法listAdd1和普通方法listAdd2:

通过对比你就明白了,非泛型类中的泛型方法比泛型类中的泛型方法多了一个菱形表达式<>而已,仅此而已。

public class Generic<T>{//泛型类中的泛型参数方法public  List<T>  listAdd(T[] arr,List<T> list) {for (T t : arr) {list.add(t);}return list;}
}
    //非泛型类中的泛型方法public static <T> List<T> listAdd1(T[] arr, List<T> list) {for (T t : arr) {list.add(t);}return list;}//非泛型类中的普通方法public static  List<String> listAdd2(String [] arr, List<String> list) {for (String t : arr) {list.add(t);}return list;}

二.关于Class<T>和Class<?>

public class Box<T> {private T t;public Box(){}public Box(T data){this.t=data;}public T getT() {return t;}public void setT(T t) {this.t = t;}
}
    public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);Box<String> s=new Box<String>("abc");Box<Integer> i=new Box<Integer>(123);System.out.println("s class:" + s.getClass());System.out.println("i class:" + i.getClass());System.out.println(s.getClass() == i.getClass());getData(s);getData(i);}public static  <T> void getData(Box<T> data){System.out.println("data :" + data.getT());}
public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);Box<String> s=new Box<String>("abc");Box<Integer> i=new Box<Integer>(123);System.out.println("s class:" + s.getClass());System.out.println("i class:" + i.getClass());System.out.println(s.getClass() == i.getClass());getData(s);getData(i);}public static  void getData(Box<?> data){System.out.println("data :" + data.getT());}

可以看到<?>实际上和  泛型方法是等效的,只要返回值前面加上 <T>就可以了。

说透泛型类和泛型方法以及Class<T>和Class<?>的差异相关推荐

  1. 【Java 泛型】泛型简介 ( 泛型类 | 泛型方法 | 静态方法的泛型 | 泛型类与泛型方法完整示例 )

    文章目录 一.泛型简介 二.泛型类 三.泛型方法 四.静态方法的泛型 五.泛型类与泛型方法完整示例 一.泛型简介 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; j ...

  2. java 泛型接口 范型类 范型方法_泛型类、泛型方法、泛型接口

    我们知道Object类可以接收任何类型的类,如果描述一个坐标可以用数字描述,也可以用字符串描述(东经 北纬-),Object根据不同的需求接收不同的类可以完成一些操作: class Position ...

  3. 泛型类、泛型方法及泛型应用

    泛型类.泛型方法及泛型应用 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口 ...

  4. 【蓝桥软件学院】泛型类、泛型方法及泛型应用

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  5. Java泛型(泛型类,泛型方法,静态方法泛型,泛型类与泛型方法例子)

    泛型 泛型简介 泛型可以理解为参数化类型,主要作用在类,方法和接口上. Java泛型 与 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的模板开发的 , 目的是让开发者可以写出通用,灵活 ...

  6. 泛型类与泛型方法的说明

    目录 1. 泛型的提出 2. 在集合中使用泛型 3. 自定义泛型类 1. 使用泛型类 2. 子类继承泛型类 4. 泛型方法 1. 泛型的提出 List中默认的类型是Object,当我们向List中传入 ...

  7. Java系列之:泛型类、泛型方法、泛型接口

    Java系列之:泛型类.泛型方法.泛型接口 一.泛型 二.泛型类 三.泛型方法 四.泛型接口 五.类型通配符 一.泛型 泛型:本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.将类型由原来的 ...

  8. java 泛型类 静态方法_JAVA——泛型类和泛型方法(静态方法泛型)

    泛型类定义的泛型,在整个类中有效.如果被方法是用,那么 泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了. 为了让不同的方法可以操作不同类型,而且类型还不确定.那么 可以将泛型定义在方 ...

  9. 【Java 泛型】泛型用法 ( 泛型类用法 | 泛型方法用法 | 泛型通配符 ? | 泛型安全检查 )

    文章目录 一.泛型类用法 二.泛型方法用法 三.泛型通配符 <?> 四.泛型安全检查 五.完整代码示例 1.泛型类 / 方法 2.main 函数 一.泛型类用法 泛型类用法 : 使用时先声 ...

最新文章

  1. SQL获取当月天数的几种方法
  2. android 动态录音权限,Android如何判断手机是否有录音权限的工具类
  3. 实验5 matlab程序设计2,实验5 Matlab程序设计2
  4. find 命令搜索符号链接文件夹的方法
  5. Linux Shell脚本_禁止定时任务发送邮件
  6. 守护进程之PHP实现
  7. 【转】listView中,checkBox的显示和隐藏
  8. PHP带头大哥的百宝囊!
  9. 苹果服务器消息转发,好消息!微信语音也可以转发啦!不好的消息!目前苹果还不行!...
  10. 墨墨背单词mysql_GitHub - FunStuff/WeChat-applets: 微信小程序小鸡单词
  11. IDEA 创建工作空间 (空项目) 项目组
  12. 2014年南京航空航天大学计算机学院推荐研究生公示,南京航空航天大学2013-2014学年研究生评优评奖公示...
  13. python老鼠书和蛇鼠_哪种编程语言更好?抓到‘老鼠’就是‘好猫’
  14. 实现用户登录与用户注册的思路
  15. 联想服务器能够上固态硬盘吗,联想Y400能不能装固态硬盘 需要什么接口的
  16. 重生之我是赏金猎人-SRC漏洞挖掘(一)-某SRC测试系统无脑Getshell
  17. 用JS实现一个秒表计时器
  18. java 九大行星运行_html5 canvas太阳系九大行星运行动态图代码
  19. 《Python机器学习》基础代码
  20. Win11开机时一直转圈是什么问题

热门文章

  1. 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
  2. oracle hot patch david,Oracle EBS使用adpatch工具打patch过程(hotpatch mode)
  3. F5服务器上架文档,f5云服务器
  4. java三角形创建子类_如何创建子类,以便参数属于Java中的子类类型
  5. window和linux和android进程内存CPU等监控软件
  6. 计算机系统结构 网易云课堂,计算机系统结构 (三) CPU及其结构分析
  7. C++读取文件名,过滤文件路径及后缀
  8. 怎样用python画雪花_python使用turtle库与random库绘制雪花
  9. NVME CLI -- nvme 命令查看NVME设备内部状态
  10. C++ 多线程:future 异步访问类(线程之间安全便捷的数据共享)