目录

从泛型类派生子类

1.子类不是泛型类,明确父类类型

2.子类和父类都是泛型类

泛型通配符

1.类型通配符上限

2.类型通配符下限

类型擦除


从泛型类派生子类

1.子类不是泛型类,明确父类类型

class DemoA<T>{T name;public T getName() {return name;}public void setName(T name) {this.name = name;}
}
class DemoAChild extends DemoA<String> {}
class TestDemoA {public static void main(String[] args) {DemoAChild dc = new DemoAChild();dc.setName("");//正确传入String类型参数dc.setName(123);//传入Integer编译期间报错}}

2.子类和父类都是泛型类

class DemoA<T>{T name;public T getName() {return name;}public void setName(T name) {this.name = name;}
}
class DemoAChild<T> extends DemoA<T> {}
class TestDemoA {public static void main(String[] args) {DemoAChild<String> dc = new DemoAChild();dc.setName("");//正确传入String类型参数dc.setName(123);//传入Integer编译期间报错}}

泛型通配符

用来指定传入实参类型,用?代替具体的类型实参

1.类型通配符上限

<? exteds T>表示上限为T类型,可传入T及T的子类

package test;
public class Fan {public static void main(String[] args) {People2<String> p1=new People2(5);People2<Integer> p2=new People2(6);show(p1);//String不是Number的子类,编译期间报错show(p2);//Integer是Number的子类,编译期间没报错}public static void show(People2<? extends Number> peo){//只能传入Number或Number的子类}}
class People2<T>{T age;public People2(T age) {this.age = age;}
}

2.类型通配符下限

public class Fan {public static void main(String[] args) {People2<String> p1=new People2(5);People2<Number> p2=new People2(6);show(p1);//String不是Integer的父类,编译期间报错show(p2);//Number是Integer的父类,编译期间没报错}public static void show(People2<? super Integer> peo){//只能传入Integer或Integer的父类}
}
class People2<T>{T age;public People2(T age) {this.age = age;}
}

类型擦除

泛型泛到信息只存在于编译阶段,进入jvm后,与泛型相关的信息会被擦除掉

泛型是jdk1.5之后语法,以前版本不支持,所以底层还是使用Object类型,在编译期间进行类型明确

package test;
import java.lang.reflect.Field;
public class test {public static void main(String[] args) {Erasure<String> erasure = new Erasure("hello");Field[] fs = erasure.getClass().getDeclaredFields();for (Field f : fs) {System.out.println("Field name " + f.getName() + " type:" + f.getType().getName());}}
}
class Erasure <T> {T object;public Erasure(T object) {this.object = object;}
}

我们通过反射可以看出运行时还是一个Object类

泛型(派生子类,泛型通配符,类型擦除)相关推荐

  1. java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题

    原 java泛型(二).泛型的内部原理:类型擦除以及类型擦除带来的问题 2012年08月29日 23:44:10 Kilnn 阅读数:56717 版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  2. 一句话,讲清楚java泛型的本质(非类型擦除)

    ?欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 背景 昨天,在逛论坛时遇到个这么个问题,上代码: public class GenericT ...

  3. Java泛型总结---基本用法,类型限定,通配符,类型擦除

    一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...

  4. java泛型的泛型_Java 泛型总结(一):基本用法与类型擦除

    简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...

  5. Java泛型的类型擦除

    写在前面:最近在看泛型,研究泛型的过程中,发现了一个比较令我意外的情况,Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节代码中是不包含泛型中的类型信息的.使用泛型的时候加上的类 ...

  6. Java基础篇:泛型与类型擦除

    一.什么是泛型: 泛型的本质是 参数化类型,也就是说 将所操作的数据类型 指定为一个参数,在不创建新类的情况下,通过参数来指定所要操作的具体类型(类似于方法中的变量参数,此时类型也定义成参数形式),也 ...

  7. list 泛型_带你深挖Java泛型类型擦除以及类型擦除带来的问题

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:蜗牛大师 cnblogs.com/wuqinglong/p/9456193.html ...

  8. java泛型-类型擦除

    2019独角兽企业重金招聘Python工程师标准>>> 最近了解了一下java的泛型,了解到了"类型擦除"这个东西,现做个简单小结. java泛型实现的原理可以说 ...

  9. 泛型中的类型擦除和桥方法

    在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程.为了实现泛型,Java编译器应用类型擦除实现: 1.  用类型参数(type parameters)的限定(如果没有就用Object ...

最新文章

  1. python电子时钟包装盒_python 电子时钟
  2. android编程中setLayoutParams方法设置
  3. python安装mysqlclient模块报fatal error: Python.h:解决方法
  4. linux history文件路径,Linux、Unix常用命令(文件和目录相关)
  5. 搜索 由浅入深 之一 水题
  6. 图的定义与术语 - 数据结构和算法54
  7. 爬虫-获取访问后可见的页面-get方法cookies参数形式
  8. android组建之间通信_android组件间通信有哪些方式
  9. iOS charles 抓包使用
  10. RecyclerView使用中遇到的问题
  11. 8 项目沟通管理和干系人管理
  12. 信度spss怎么做_毕业季:毕业论文利用spss做信度分析步骤详解
  13. 15亿美元!软银联合GungHo收购手游巨头Supercell
  14. python判断word页码
  15. 云计算的定义是什么?
  16. html打印图片不显示不全,Word里图片显示全打印不全是怎么回事
  17. 8.3 时间戳(Time Stamp)选项
  18. 智能停车场ARM工控主板应用
  19. LCD显示屏的优势与缺点浅析
  20. 微积分的本质(六):多元微积分入门——隐函数求导

热门文章

  1. 为什么建议少用 if 语句
  2. Go的变量到底在堆还是栈中分配
  3. 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
  4. java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF
  5. 【PHPExcel】生成Excel2007文件并下载
  6. 数据采集技术python网络爬虫项目化教程_数据采集技术Python网络爬虫项目化教程 黄锐军课程资源.zip-KC17.pptx...
  7. java中的new_java里的new到底是什么意思?
  8. mysql xml生成工具_自动生成po、dao、xml 工具:mybatis-generator
  9. java write_java中write(byte[] b)与write(byte[] b,int off,int len)区别
  10. 7-11 分段计算居民水费 (C语言)