我经常会想获取参数的实际类型,在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"); } }

最新文章

  1. php如何防止图片盗用/盗链的两种方法(转)
  2. nginx做本地目录映射
  3. [Java 基础] 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
  4. H5 App开发用WeX5垃圾 试用一周,我果断放弃了wex5
  5. win7操作技巧
  6. [jobdu]栈的压入、弹出序列
  7. 【HDOJ】2279 File Search Tool
  8. div+css3列布局,带详尽注释
  9. PS5穿越云层3D文字
  10. 求double类型的n次方
  11. eslint 的基本配置介绍
  12. Activity平移动画
  13. unix重定向标记
  14. salesforce零基础学习(九十二)使用Ant Migration Tool 实现Metadata迁移
  15. Centos 7安装RabbitMQ 3.7.8版本(单机版)-不使用RPM
  16. 掌握闭包closure (含义及优缺点)
  17. Linux下常用系统分析工具总结(转)
  18. 微软被传证实收购 GitHub
  19. Scala学习(六)---Scala对象
  20. 分享JavaScript获取网页关闭与取消关闭的事件

热门文章

  1. curl命令测试服务器是否支持断点续传
  2. jenkins的安装和启用
  3. pymupdf 修改pdf文件
  4. mongodb常用基本命令
  5. delphi xe10 文件目录/路径操作 (Andorid、ios)
  6. 关于ThreadLocal的一道面试题(酷我公司)
  7. Electron是个啥?
  8. NX二次开发-将信息窗口中的文本保存到文本文件中UF_UI_save_listing_window
  9. NX二次开发-NXOpen方式遍历所有体workPart-&gt;Bodies();
  10. 英语影视台词---The Professor