首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

应用反射获得泛型的实际参数

2012-07-27 
使用反射获得泛型的实际参数今天刚学习的,来加深一下记忆,以免忘记.package com.test.genericimport java

使用反射获得泛型的实际参数

今天刚学习的,来加深一下记忆,以免忘记.

package com.test.generic;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.Date;import java.util.Vector;public class GenericTest {public static void main(String[] args) {try {Method method=GenericTest.class.getMethod("getParamType", Vector.class);Type[] types=method.getGenericParameterTypes();ParameterizedType pType=(ParameterizedType) types[0];System.out.println(pType.getActualTypeArguments()[0]);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}}public void getParamType(Vector<Date> param){}}

?首先得了解几个类:

Method就不多说了.

Type:

public interface Type
Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。 从Jdk1.5开始.

?

ParameterizedType:

?

public interface ParameterizedType
extends Type
Type[] getActualTypeArguments()
返回表示此类型实际类型参数的 Type 对象的数组。

注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。

?

返回: 表示此类型的实际类型参数的 Type 对象的数组 抛出: TypeNotPresentException - 如果任何实际类型参数引用不存在的类型声明 MalformedParameterizedTypeException - 如果任何实际类型参数引用参数化类型,该类型出于某种原因无法被实例化

????

getGenericParameterTypes
public Type[] getGenericParameterTypes()
按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的。如果底层方法不带参数,则返回长度为 0 的数组。

如果形参类型是参数化类型,则为其返回的 Type 对象必须实际反映源代码中使用的实际类型参数。

如果形参类型是类型变量或参数化类型,则创建它。否则将解析它。

?

返回: 按照声明顺序返回表示底层方法的形参类型的 Type 对象数组 抛出: GenericSignatureFormatError - 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式 TypeNotPresentException - 如果底层方法的所有参数类型都引用不存在的类型声明 MalformedParameterizedTypeException - 如果所有底层方法的参数类型引用无论如何都无法实例化的参数化类型

?

?

我的理解:首先通过反射方法获得特定名称的方法.然后可以按照声明顺序返回 Type 对象的数组,最后获得参数数组中的第一个(在本例中仅此一个)参数.然后可以通过getActualTypeArguments()来得到参数的准确类型.然后syso出来.

热点排行