`
zxl10059
  • 浏览: 57186 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

通过反射获得泛型的实际类型参数

    博客分类:
  • J2SE
阅读更多
Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。
package com.zhiming.tree;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.Vector;
//E为任意参数类型,在类名中加<E>可起到控制类中方法参数使用,和方法返回值的类型统一
public class ProductDao<E>
{

	public void add(E x)
	{
		
	}
	public void delete(E x)
	{

	}

	public E findByCondition(String name)
	{
		return null;
	}
	public static void applyVector(Vector<Date>  v1)
	{
		
	}
	public static void main(String[] args) throws SecurityException, NoSuchMethodException
	{
		Vector<Date>  v1=new Vector<Date>();
		//无法直接通过反射获得vector<Date>泛型的参数类型,只有通过方法去获得
		Method method=ProductDao.class.getMethod("applyVector", Vector.class);
		Type[] types = method.getGenericParameterTypes();
		ParameterizedType paratype=(ParameterizedType)types[0];
		System.out.println(paratype.getRawType());
		System.out.println(paratype.getActualTypeArguments()[0]);
	}
	
}
分享到:
评论

相关推荐

    java中获取泛型类的子类

    通过反射获得指定类的父类的泛型参数的实际类型

    Java获取代码中方法参数名信息的方法

    在java中,可以通过反射获取到类、字段、方法签名等相关的信息,像方法名、返回值类型、参数类型、泛型类型参数等,但是不能够获取方法的参数名。在实际开发场景中,有时需要根据方法的参数名做一些操作,那么该如何...

    C#高效编程

    十载演进,C#日渐强大,新增了泛型、函数式编程概念,以及对静态类型和动态类型的支持,而大量新兴编程习惯背后,却是种种具有迷惑性的“陷阱”,Bill Wagner将以此书帮您避免C#语言和.NET环境中的“陷阱”。...

    CLR.via.C#.3rd.Edition 2010 框架设计 Via C# 英文版 免积分

    泛型 第17章自定义属性 第18章 可空值类型第Ⅴ部分 CLR实用特性 第19章 异常 第20章 自动内存管理(垃圾收集) 第21章 CLR寄宿和应用程序域 第22章 程序集的加载与反射 第23章 执行异步操作 第24章 线程同步

    Java 高级特性.doc

    1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 3、泛型的类型参数可以有多个。 4、泛型的参数...

    asp.net知识库

    泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 Attributes in C# 手痒痒,也来个c# 2.0 object pool 泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略...

    DWR.xml配置文件说明书(含源码)

    仅仅通过反射方法没有办法知道集合元素中的类型,所以上面的两个converter能将任何集合转换成相对javascript而言有意义的对象.然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,...

    【。net 专业】 面试题

    第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 2.如何把一个array复制到arrayList里 foreach( object o in array )arrayList.Add(o); 3.datagrid.datasouse可以连接什么数据源 ...

    javaSE代码实例

    16.4.5 “生产者-消费者”案例的实际运行 365 16.4.6 notify方法的使用 366 16.4.7 同步的语句块 367 16.4.8 线程的死锁 369 16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在...

    asp.net面试题

    第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 2.如何把一个array复制到arrayList里 foreach( object o in array )arrayList.Add(o); 3.datagrid.datasouse可以连接什么数据源 ...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    &lt;br&gt;3、 增加ObjectTable泛型类来承载查询返回的对象集,不但比IList更加强类型化,还提供了二分查找功能,使得对象结果集可以在应用程序内存中进行重排序和快速查找; &lt;br&gt;4、 提供了强大的QueryFilter类...

    AppFramework_V1.0

    &lt;br&gt;3、 增加ObjectTable泛型类来承载查询返回的对象集,不但比IList更加强类型化,还提供了二分查找功能,使得对象结果集可以在应用程序内存中进行重排序和快速查找; &lt;br&gt;4、 提供了强大的QueryFilter类...

    AppFramework_V1.0_New

    &lt;br&gt;3、 增加ObjectTable泛型类来承载查询返回的对象集,不但比IList更加强类型化,还提供了二分查找功能,使得对象结果集可以在应用程序内存中进行重排序和快速查找; &lt;br&gt;4、 提供了强大的QueryFilter类...

    21天学通Java-由浅入深

    162 8.5.8 重写equals方法 163 8.6 final与继承的关系 164 8.7 abstract与继承的关系 165 8.8 什么是多态 166 8.9 什么是枚举类 168 8.10 什么是反射机制 169 8.11 什么是泛型 170 8.12 综合练习 172 8.13 小结 172 ...

    整理后java开发全套达内学习笔记(含练习)

    Generic [java] 泛型 [dʒi'nerik] goto (保留字) 跳转 heap n.堆 [hi:p] implements (关键字) 实现 ['implimәnt] import (关键字) 引入(进口,输入) Info n.信息 (information [,infә'meiʃәn] ) ...

Global site tag (gtag.js) - Google Analytics