【0】README

0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 反射和泛型 的相关知识;


【1】反射和泛型相关

1.1)现在, Class类是泛型的, 如 String.class 实际上是一个 Class 类的对象(事实上, 是唯一的对象);
1.2)类型参数十分有用, 因为它允许Class 方法的返回类型更加具有针对性。

  • 1.2.1)下面的Class 中的方法就使用了类型参数:

对上述语句的分析(Analysis):

  • A1)newInstance 方法: 它返回一个实例, 这个实例所属的类由默认的 构造器获得, 它的返回类型目前被声明为 T, 其类型与 Class 描述的类相同, 这样就免除了类型转换;
  • A2)如果给定的类型确实是T的一个子类型, cast 方法就会返回一个 现在声明为 类型T的对象, 否则, 抛出一个 BadCastException 异常;
  • A3)如果这个类不是 enum 类或类型T 的枚举值的数组, getEnumConstants 方法将返回 null;
  • A4)最后, getConstructor 与 getDeclaredConstructor 方法返回一个 Constructor 对象。 Construtor 类也已经变成 泛型, 以便 newInstance 方法有一个正确的 返回类型;

【2】使用 Class 参数进行类型匹配

2.1)有时, 匹配泛型方法中的Class 参数的类型变量很有使用价值。 看个荔枝(据说比较权威)

public static <T> Pair<T> makePair(Class<T> c) throws InstantiationException , IllegalAccessException
{return new Pair<>(c.newInstance (), c.newInstance());
}
  • 2.1.1)如果调用 makePair(Employee.class)
  • 2.1.2)Employee.class 是类型 Class< Employee> 的一个对象。 makePair 方法的类型参数T 同 Employee 匹配, 并且编译器可以推断出这个方法将返回一个 Pair< Employee>;

【3】虚拟机中的泛型类型消息

3.1)java泛型的卓越特性之一是在虚拟机中 泛型类型的擦除;

  • 3.1.1)如 原始的 Pair类知道源于泛型类 Pair< T> , 即使一个 Pair类型的对象无法区分是由 Pair< String> 构造的还是由 Pair< Employee> 构造的;
  • 3.1.2)类似的, 看一下方法
public static Comparable min(Comparable[] a) , 这是一个方法的擦除 public static <T extends Comparable<? super T>> T min(T[] a);

3.2)可以用反射API类确定:

  • 3.2.1)这个泛型方法有一个叫做T的类型参数;
  • 3.2.2)这个类型参数有一个子类型限定, 其自身又是一个泛型类型;
  • 3.2.3)这个限定类型有一个通配符参数;
  • 3.2.4)这个通配符参数有一个 超类型限定;
  • 3.2.5)这个泛型方法有一个泛型数组参数;

Conclusion) 一句话, 需要重新构造实现者声明的泛型类以及方法中的所有内容。 但是, 不会知道对于特定的对象或方法调用,如何解释类型参数;
3.3) 为了表达泛型类型声明, java SE 5.0 在 java.lang.reflect 包中提供了一个新的接口 Type, 该接口有如下子类:

  • 3.3.1)Class 类:描述具体类型;
  • 3.3.2)TypeVariable接口: 描述类型变量(如 T extends Comparable< ? super T>);
  • 3.3.3)WildcardType接口:描述通配符(如? super T);
  • 3.3.4)ParameterizedType 接口:描述泛型类或接口类型;(如 Comparable< ? super T>);
  • 3.3.5)GenericArrayType 接口: 描述泛型数组(如 T[]);

3.4)看个荔枝:(使用 泛型反射API 打印出给定类的有关内容), 如果用Pair类运行, 将会得到如下报告:

Attention)源代码参见: https://github.com/pacosonTang/core-java-volume/blob/master/chapter12/GenericReflectionTest.java

java泛型程序设计——反射和泛型相关推荐

  1. java泛型程序设计——类型变量限定 + 泛型代码和虚拟机

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 类型变量限定 + 泛型代码和虚拟机 的知识: [1]类型变量的限定 ...

  2. Java之通过反射越过泛型检查

    package cn.itcast_06;import java.lang.reflect.Method; import java.util.ArrayList;/** 我给你ArrayList< ...

  3. java 反射与泛型_Java基础系列 - 泛型和反射机制

    package com.test5; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Java泛型和反射机 ...

  4. java泛型程序设计——翻译泛型表达式+翻译泛型方法

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 翻译泛型表达式+翻译泛型方法 的知识: [1]翻译泛型表达式 1.1 ...

  5. java 反射泛型方法_java基础之反射和泛型以及注解

    java基础之反射和泛型以及注解 泛型擦除 泛型擦除: 泛型只在编译时期有效,编译后的字节码文件中不存在泛型信息. 声明泛型集合,集合两端类型必须一致.类型也可以用包装类型,泛型的类型必须是引用类型, ...

  6. 关于Java你不知道的那些事之Java注解和反射

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:轻 ...

  7. Java基础学习(11)---Java注解和反射

    文章目录 一.注解概述 二.内置注解 三.元注解 四.自定义注解 五.反射概述 ★ 静态语言 VS 动态语言 反射机制 Java反射机制研究及应用 Java反射优点和缺点 六.Class类 获取Cla ...

  8. java泛型程序设计——Varargs 警告+不能实例化类型变量

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 Varargs 警告+不能实例化类型变量 的知识: [1] Vara ...

  9. 《Java核心技术》学习笔记——第8章 泛型程序设计

    版权声明:本文为博主ExcelMann的原创文章,未经博主允许不得转载. 第8章 泛型程序设计 作者:ExcelMann,转载需注明. 第8章内容目录: 为什么要使用泛型程序设计 定义简单泛型类 泛型 ...

最新文章

  1. 如何实现Zabbix的主动注册功能
  2. 创建electron应用
  3. linux7网卡配置vlan,centos7配置vlan,实现一个网卡两个地址的功能
  4. 分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
  5. jdk源码分析书籍 pdf_什么?Spring5 AOP 默认使用Cglib?从现象到源码深度分析
  6. php autoload用法,php自动加载__autoload()函数用法
  7. 【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row
  8. 构建meteor应用程序_我如何在一个月内构建一个复杂的文本分析应用程序
  9. matlab 基于小波变换的图像压缩,基于Matlab的小波变换在图像压缩中的应用
  10. 一个程序员成功的六个阶段
  11. 【优化调度】基于matlab求解共享储能电站工业用户日前经济调度优化问题【含Matlab源码 1103期】
  12. ZooKeeper解读
  13. 用matlab编模糊pid程序,实例:MATLAB/Simulink实现模糊PID控制
  14. IDEA热部署之JRebel破解附反向代理破解exe(安装)
  15. word2016插入公式技巧2
  16. 各厂家端口MTU计算及应用
  17. ROS 交叉编译介绍
  18. BUCT数据结构——图
  19. Java:BigDecimal的学习与使用
  20. 超级文件分割《合并》机(分割大文件)

热门文章

  1. cfF. Boring Queries
  2. Acwing 1083. Windy数
  3. [POJ 3164]Command Network(最小树形图,朱刘算法)
  4. P3320:寻宝游戏(生成树)
  5. jzoj1404-菱形内的计数【模拟】
  6. 欢乐纪中某A组赛【2019.7.10】
  7. 牛客练习赛46T1-华华教奕奕写几何【数学】
  8. POJ1179,P4342-[IOI1998]Polygon【区间dp】
  9. 【单调栈】Largest Rectangle in a Histogram(luogu-SP1805/poj 2559)
  10. 【dfs】【链表】连通图 (ssl 1758)