关于java反射获取泛型
public class Test<T> {
private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};
private final Type type = typeToken.getRawType();
public void foo() {
System.out.println(this.type);
}
public static void main(String[] args) {
Test<Integer> test = new Test<Integer>() {};
Test<Integer> test2 = new Test<Integer>();
test.foo();// class java.lang.Integer
test2.foo();//
}
}
利用以上代码可以获取泛型类型,对于test与test2的输出不同有些困惑。以下为解答:
首先,当利用
Test<String> test2 = new Test<String>();
进行实例化的时候,java没有办法将String传过去。于是
private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};
就无法得知T的具体类型,因此只能输出T。
接着对于
private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};
根据javadoc(见参考链接2)
Constructs a new type token of T while resolving free type variables in the context of declaringClass. Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.
只有创建匿名子类,才能将类型参数嵌入到匿名子类的结构中,此时就能获取到Integer了(关于匿名子类如何操作,见参考链接3)
参考1:https://stackoverflow.com/questions/38046880/how-to-use-typetoken-to-get-type-parameter
参考2:https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/reflect/TypeToken.html#TypeToken(java.lang.Class)
参考3:http://gafter.blogspot.com/2006/12/super-type-tokens.html
关于java反射获取泛型的更多相关文章
- Java反射给泛型集合赋值
Java反射给泛型集合赋值 泛型 Java泛型简单描述下: 比如创建一个List集合,我想在里边只放Student对象信息,就需要写成 List<Student> studentList ...
- Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别
Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别 在工作中遇到一个问题,就是你需要去判断某个字符串是不是对象的某个成员属性名,然后根据判断结果 ...
- Java反射获取class对象的三种方式,反射创建对象的两种方式
Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...
- JAVA 注解,泛型,反射获取泛型,并实例化
JAVA 的泛型加大了 编程的灵活性,在配合上反射,可以让我们省去大量的重复代码,当你用 SpringBoot 整合 JPA 的时候 你会发现,你的 DAO 层只需要继承 BaseDao,在显示标明泛 ...
- java 反射和泛型-反射来获取泛型信息
通过指定对应的Class对象,程序可以获得该类里面所有的Field,不管该Field使用private 方法public.获得Field对象后都可以使用getType()来获取其类型. Class&l ...
- java 反射 子类泛型的class
很早之前写过利用泛型和反射机制抽象DAO ,对其中获取子类泛型的class一直不是很理解.关键的地方是HibernateBaseDao的构造方法中的 Type genType = getClass() ...
- Java反射获取泛型类型
本文链接:https://blog.csdn.net/hongxingxiaonan/article/details/49202613 在Java反射技术的应用中,取得一个类的成员.方法和构造函数相对 ...
- 深入分析Java反射(三)-泛型
前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...
- Java反射,泛型在Json中的运用
最近项目中遇到了Json数据自动获取的功能,不然令人想起java的反射,已经很长时间没复习java了正好一块连java的这一块内容一起过一遍.java中的反射无疑就相当于java开发者的春天,在众多的 ...
随机推荐
- 关于制作C语言头文件的思考
我们接触的第一个c语言代码是这个: #include<stdio.h> main() { printf("Hello World"); } 这是最简单的c代码,然而,它 ...
- oracle AWR性能监控报告生成方法
目前相当一部分公司会用到oracle,在做性能测试的时候,对数据库的监控很重要,那么这里先介绍下如何生成oracle自带的awr监控报告,而具体报告的内容分析会放在后续的博客中 oracle性能分析入 ...
- JAVA的Executor框架
Executor框架分离了任务的创建和执行.JAVA SE5的java.util.concurrent包中的执行器(Executor)管理Thread对象,从而简化了并发编程.Executor引入了一 ...
- 【干货】Markdown编辑博文,公式图片轻松搞定
# Markdown 使用操作手册 作者:白宁超 Blog:伏草唯存 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」 ...
- CodeBlocks
- Session Cookie的HttpOnly和secure属性
Session Cookie的HttpOnly和secure属性 一.属性说明: 1 secure属性 当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTT ...
- 开涛spring3(4.3) - 资源 之 4.3 访问Resource
4.3.1 ResourceLoader接口 ResourceLoader接口用于返回Resource对象:其实现可以看作是一个生产Resource的工厂类. public interface Re ...
- 2D游戏开发(1)
<外星人入侵> 通过pygame,入门python的2D游戏开发过程,通过教材制作一个打外星人游戏. 1.函数 run_game() import sys import pygame de ...
- Customer segmentation – LifeCycle Grids with R(转)
I want to share a very powerful approach for customer segmentation in this post. It is based on cust ...
- 初码-Azure系列-如何在控制面板中选择中文版操作系统
之前在文章<初码-Azure系列-记一次从阿里云到Azure的迁移和部署>中说到,默认的Windows Server 2016操作系统是英文版,后来摸索出中文版的方法,如下: