泛型(派生子类,泛型通配符,类型擦除)
目录
从泛型类派生子类
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类
泛型(派生子类,泛型通配符,类型擦除)相关推荐
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
原 java泛型(二).泛型的内部原理:类型擦除以及类型擦除带来的问题 2012年08月29日 23:44:10 Kilnn 阅读数:56717 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- 一句话,讲清楚java泛型的本质(非类型擦除)
?欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 背景 昨天,在逛论坛时遇到个这么个问题,上代码: public class GenericT ...
- Java泛型总结---基本用法,类型限定,通配符,类型擦除
一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...
- java泛型的泛型_Java 泛型总结(一):基本用法与类型擦除
简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...
- Java泛型的类型擦除
写在前面:最近在看泛型,研究泛型的过程中,发现了一个比较令我意外的情况,Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节代码中是不包含泛型中的类型信息的.使用泛型的时候加上的类 ...
- Java基础篇:泛型与类型擦除
一.什么是泛型: 泛型的本质是 参数化类型,也就是说 将所操作的数据类型 指定为一个参数,在不创建新类的情况下,通过参数来指定所要操作的具体类型(类似于方法中的变量参数,此时类型也定义成参数形式),也 ...
- list 泛型_带你深挖Java泛型类型擦除以及类型擦除带来的问题
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:蜗牛大师 cnblogs.com/wuqinglong/p/9456193.html ...
- java泛型-类型擦除
2019独角兽企业重金招聘Python工程师标准>>> 最近了解了一下java的泛型,了解到了"类型擦除"这个东西,现做个简单小结. java泛型实现的原理可以说 ...
- 泛型中的类型擦除和桥方法
在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程.为了实现泛型,Java编译器应用类型擦除实现: 1. 用类型参数(type parameters)的限定(如果没有就用Object ...
最新文章
- python电子时钟包装盒_python 电子时钟
- android编程中setLayoutParams方法设置
- python安装mysqlclient模块报fatal error: Python.h:解决方法
- linux history文件路径,Linux、Unix常用命令(文件和目录相关)
- 搜索 由浅入深 之一 水题
- 图的定义与术语 - 数据结构和算法54
- 爬虫-获取访问后可见的页面-get方法cookies参数形式
- android组建之间通信_android组件间通信有哪些方式
- iOS charles 抓包使用
- RecyclerView使用中遇到的问题
- 8 项目沟通管理和干系人管理
- 信度spss怎么做_毕业季:毕业论文利用spss做信度分析步骤详解
- 15亿美元!软银联合GungHo收购手游巨头Supercell
- python判断word页码
- 云计算的定义是什么?
- html打印图片不显示不全,Word里图片显示全打印不全是怎么回事
- 8.3 时间戳(Time Stamp)选项
- 智能停车场ARM工控主板应用
- LCD显示屏的优势与缺点浅析
- 微积分的本质(六):多元微积分入门——隐函数求导
热门文章
- 为什么建议少用 if 语句
- Go的变量到底在堆还是栈中分配
- 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
- java ee核心框架实战 pdf_Java EE核心框架实战 高洪岩 中文PDF
- 【PHPExcel】生成Excel2007文件并下载
- 数据采集技术python网络爬虫项目化教程_数据采集技术Python网络爬虫项目化教程 黄锐军课程资源.zip-KC17.pptx...
- java中的new_java里的new到底是什么意思?
- mysql xml生成工具_自动生成po、dao、xml 工具:mybatis-generator
- java write_java中write(byte[] b)与write(byte[] b,int off,int len)区别
- 7-11 分段计算居民水费 (C语言)