上述代码在IDE(,集成开发环境)中 , 无法通过编译前检查 , 会直接报错 , 如下:
文章插图
总结:Java泛型先检查在编译
4.通过反射跳过类型检查
通过上面的章节已知 , 无法将类型的数据写入到类型的泛型中 , 那么久真的无法实现吗?
其实是可以的:通过Java反射可以跳过泛型的类型检查 。
//通过反射跳过类型检查LOGGER.info("通过反射跳过类型检查:");MyGenericsType doubleMyGenericsType1 = new MyGenericsType();//类型检查通过doubleMyGenericsType1.setT(new Double(2D));//类型检查不通过//doubleMyGenericsType.setT(new Integer(1));//通过反射跳过类型检查doubleMyGenericsType1.getClass().getMethod("setT",Object.class).invoke(doubleMyGenericsType1,new Integer(1));LOGGER.info(doubleMyGenericsType1.getT());
2018-02-23 09:57:40 INFOTypeErasureDemo:41 - 通过反射跳过类型检查:2018-02-23 09:57:40 INFOTypeErasureDemo:49 - 1
上面的示例 , 通过反射将类型的数据写入了类型的泛型对象中 , 并且能够get出来 , 类型为 。
那么实际上1存储的是什么类型呢?
我们运行如下代码:
LOGGER.info(doubleMyGenericsType1.getT().getClass().toString());
会报错:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Doubleat pers.hanchao.generics.erasure.TypeErasureDemo.main(TypeErasureDemo.java:50)
【Java泛型04 : 泛型类型擦除】通过报错分析 , 实际1实际存储的是类型 。
- Java泛型07 : Java自带的泛型Collection、List、Map、
- java 备忘录方法求解,Java备忘录模式
- 业余学java赚钱,不吃透都对不起自己
- Java-透析 -> 查找算法
- Java 大学B组 第十届蓝桥杯 2019年国赛真题
- Java 大学C组 第十届蓝桥杯 2019年国赛真题
- java高校信息管理系统,java高校机房预约管理系统
- java设计模式之 代理模式
- 根据字体类型和大小铺满整个页面 c#实现多页打印)
- [附源码]Java计算机毕业设计SSM翻转课堂微视频管理系统