JAVA基础_反射获取泛型参数类型
2024-09-29 20:23:35
我经常会想获取参数的实际类型,在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"); } }
最新文章
- php如何防止图片盗用/盗链的两种方法(转)
- nginx做本地目录映射
- [Java 基础] 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- H5 App开发用WeX5垃圾 试用一周,我果断放弃了wex5
- win7操作技巧
- [jobdu]栈的压入、弹出序列
- 【HDOJ】2279 File Search Tool
- div+css3列布局,带详尽注释
- PS5穿越云层3D文字
- 求double类型的n次方
- eslint 的基本配置介绍
- Activity平移动画
- unix重定向标记
- salesforce零基础学习(九十二)使用Ant Migration Tool 实现Metadata迁移
- Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM
- 掌握闭包closure (含义及优缺点)
- Linux下常用系统分析工具总结(转)
- 微软被传证实收购 GitHub
- Scala学习(六)---Scala对象
- 分享JavaScript获取网页关闭与取消关闭的事件
热门文章
- curl命令测试服务器是否支持断点续传
- jenkins的安装和启用
- pymupdf 修改pdf文件
- mongodb常用基本命令
- delphi xe10 文件目录/路径操作 (Andorid、ios)
- 关于ThreadLocal的一道面试题(酷我公司)
- Electron是个啥?
- NX二次开发-将信息窗口中的文本保存到文本文件中UF_UI_save_listing_window
- NX二次开发-NXOpen方式遍历所有体workPart->;Bodies();
- 英语影视台词---The Professor