我经常会想获取参数的实际类型,在Hibernate中就利用的这一点。

domain: Person.java

public class Person {

    // 编号
private Long id; // 姓名
private String name; public Person() {
} public Person(Long id, String name) {
this.id = id;
this.name = name;
} public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
} }

使用了泛型参数的类:GenericClass.java

public class GenericClass {

    /**
* 打印人员信息
* @param persons
*/
public void printPersonInfo(List<Person> persons) {
for (Person person : persons) {
System.out.println(person);
}
} /**
* 获取人员列表
* @return
*/
public List<Person> getPersonList(){
return new ArrayList<>();
} }

获取参数泛型的实际类型:GetGenericType.java

public class GetGenericType {

    public static void main(String[] args) throws Exception {
GenericClass genericClass = new GenericClass();
List<Person> persons = new ArrayList<>();
persons.add(new Person(1L, "Jim"));
genericClass.printPersonInfo(persons);
System.out.println("Begin get GenericClass method printPersonInfo(List<Person> persons) paramter generic type");
// 利用反射取到方法参数类型
Method method = genericClass.getClass().getMethod("printPersonInfo", List.class);
// 获取方法的参数列表
Type[] paramTypes = method.getGenericParameterTypes();
// 由于已知只有一个参数,所以这里取第一个参数类型
ParameterizedType type = (ParameterizedType) paramTypes[0];
// 获取参数的实际类型
Type[] params = type.getActualTypeArguments();
System.out.println("params[0] = " + params[0].getTypeName());
System.out.println("End get GenericClass method printPersonInfo(List<Person> persons) paramter generic type"); } }

JAVA基础_反射获取泛型参数类型的更多相关文章

  1. 利用ParameterizedType获取泛型参数类型

    //利用ParameterizedType获取java泛型的参数类型 public class Demo {     public static void main(String[] args) { ...

  2. java 编程基础 反射方式获取泛型的类型Fileld.getGenericType() 或Method.getGenericParameterTypes(); (ParameterizedType) ;getActualTypeArguments()

    引言 自从JDK5以后,Java Class类增加了泛型功能,从而允许使用泛型来限制Class类,例如,String.class的类型实际上是 Class 如果 Class 对应的类暂时未知,则使 C ...

  3. Gson通过借助TypeToken获取泛型参数的类型的方法

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

  4. Gson通过借助TypeToken获取泛型参数的类型的方法(转)

    最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使 ...

  5. Java基础_类的加载机制和反射

    类的使用分为三个步骤: 类的加载->类的连接->类的初始化 一.类的加载 当程序运行的时候,系统会首先把我们要使用的Java类加载到内存中.这里加载的是编译后的.class文件 每个类加载 ...

  6. Java基础之十五 泛型

    第十五章 泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大. 在面对对象编程语言中,多态算是一种泛化机 ...

  7. Java基础之多态和泛型浅析

    Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...

  8. 黑马程序员:Java基础总结----反射

    黑马程序员:Java基础总结 反射   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...

  9. java基础篇5之泛型

    1 泛型的基本应用 //反射方式 指定类型,就不用强转 Construcctor<String> constructor = String.class.getConstructor(Str ...

随机推荐

  1. Ruby 语法

    Ruby 语法 让我们编写一个简单的 Ruby 程序.所有的 Ruby 文件扩展名都是 .rb.所以,把下面的源代码放在 test.rb 文件中. 实例 #!/usr/bin/ruby -w puts ...

  2. 阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准

    2018年12月13日,第八届中国云计算标准和应用大会在京召开,会上阿里云HBase宣布推出全新X-Pack服务,支持SQL.时序.时空.图.全文检索能力.复杂分析,从处理到分析全栈式数据库,客户开箱 ...

  3. 线性筛积性函数+反演T套路——bzoj4407

    #include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #defi ...

  4. 1 visual studio code 配置C++开发环境 (windows 开发环境)

    0 引言 最近帮GF(不幸变成ex了)配置C++开发环境,一开始想给她装个visual studio13完事,但是一想到自己安装以及使用时的诸多麻烦,就有点退却,觉得没有这个必要.正好了解到vscod ...

  5. lua之table|模块|包

    一.table table是   Lua的一种数据结构用来帮助我们创建不同的数据类型,如:数字.字典等. Lua table使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是   ni ...

  6. CF696B Puzzles(期望dp)

    传送门 解题思路 比较有意思的一道题.首先假如这个点\(x\)只有\(1\)个儿子\(u\),那么显然可得\(dp[u]=dp[x]+1\).继续如果多加一个儿子\(p\),那么\(p\)在\(u\) ...

  7. linux下mysql权限配置

    先登入mysql mysql -u root -p 然后回车键入密码! 1.2 赋予主机B操作数据库的权限 mysql> grant usage on *.* to username@192.1 ...

  8. Golang 交叉编译跨平台的可执行程序 (Mac、Linux、Windows )

    起因: 在项目中,我们每一次提交都需要添加commit 信息,而且我们的commit 信息,比较繁琐.我决定用golang语言编写一个小工具. 我决定使用语言:golang,使用工具:gox包. go ...

  9. BeanShell Sampler生成uuid

  10. PHP魔方解密

    安装composer参考:https://www.runoob.com/w3cnote/composer-install-and-usage.html 常用的加密类型及特征 加密类型 加密特征 Zen ...