`

ParameterizedType获取java泛型参数类型

 
阅读更多
ParameterizedType获取java泛型参数类型

getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type



然后将其转换ParameterizedType。。



getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。

[0]就是这个数组中第一个了。。



简而言之就是获得超类的泛型参数的实际类型。。



比如

超类

public class GenericDAO {

private Class entityClass;

protected GenericDAO() {

  Type type = getClass().getGenericSuperclass();

  Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];

  this.entityClass = (Class) trueType;

}

}

子类

public class OptionManager extends GenericDAO {



}

测试类

public class OracleTest {

public static void main(String[] args) throws Exception {

OptionManager manager = new OptionManager();

}

}

这样在你new OptionManager();以后

超类里的entityClass就是子类那里的public class OptionManager extends GenericDAO 里面的MSGC_OPTION所对应的class对象了..
分享到:
评论

相关推荐

    Java如何获取泛型类型

    Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String process(P p); } 实现类1: public class...

    Java泛型的用法及T.class的获取过程解析

    Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析。 一、泛型的基本概念 泛型是Java 5中...

    java泛型深入.pdf

    通过反射API,可以通过`ParameterizedType`接口来获取泛型类的类型参数,例如: ```java public class Base<T> { private Class<T> entityClass; } Class<?> rawType = Base.class; Type type = rawType....

    反射处理java泛型_.docx

    总结来说,`ReflectionUtil`工具类提供了一种方便的方式来处理Java泛型和反射操作,包括从`Type`获取`Class`对象,创建对象实例,以及获取泛型参数类型等。在实际开发中,正确、安全地使用反射对于提高代码的灵活性...

    泛型工具类

    - 接着,方法会检查获取到的类型是否为`ParameterizedType`类型,这是Java泛型体系中表示参数化类型的接口。如果不是,则同样返回`Object.class`。 - 如果类型检查通过,方法会继续提取实际的类型参数数组,并根据...

    Java让泛型实例化的方法

    在上面的代码中,我们使用 `getClass().getGenericSuperclass()` 方法获取当前类的父类,然后使用 `ParameterizedType` 对象获取泛型类型参数。最后,我们使用 `clazz.newInstance()` 方法实例化泛型对象。 完整...

    Java使用反射来获取泛型信息示例

    在运行结果中,我们可以看到,使用getType()方法只是获取到了字段score的类型是java.util.Map,但是使用ParameterizedType对象可以获取到字段score的泛型参数是String和Integer。 通过这个实例,我们可以看到,使用...

    java泛型的应用

    这种类型参数化的ArrayList被称为参数化类型(Parameterized Type)。 在实际应用中,泛型最常见的用途包括: 1. 使用迭代器迭代泛型集合中的元素,如示例中的`test2()`方法所示,通过`Iterator<Integer> it = list...

    Java-泛型.ppt

    例如,可以通过`ParameterizedType`获取泛型类的实际类型参数。 #### 总结 Java泛型为编程提供了极大的灵活性和类型安全性。通过对泛型类、泛型接口以及泛型方法的学习,我们可以更好地利用泛型的强大功能来编写...

    java5泛型

    虽然Java泛型在运行时会被擦除,无法直接获取到类型参数的实际类型(即`T.class`),但可以通过反射机制获取到类型信息。下面是一个典型的例子: ```java public abstract class BaseHibernateEntityDao<T> extends...

    654.652.JAVA基础教程_反射-获取运行时类的父类及父类的泛型(654).rar

    我们不能直接获取`myList`的泛型类型`T`,但我们可以通过以下方式获取其实际类型参数: ```java Field field = Class.forName("my.package.ParentClass").getDeclaredField("myList"); Type genericType = field....

    谈谈Java类型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType

    `ParameterizedType`提供了一个方法`getActualTypeArguments()`,用于获取参数化类型的实际类型参数。例如,在`methodIV`方法的参数列表中,`ArrayList[]`的`getActualTypeArguments()`会返回`ArrayList<String>`,...

    Spring 中优雅的获取泛型信息的方法

    我们可以使用 Java 的反射机制来获取 Class 对象中的泛型信息。下面是一个示例代码: ```java public static Class<?> getClassGenericType(final Class<?> clazz, final int index) { Type genType = clazz....

    java反射获取参数.zip

    `如果泛型是List,则可以通过检查其是否为ParameterizedType并获取实际类型参数。 7. Java 8的新特性: - 默认方法:Java 8引入了接口的默认方法,反射也可以调用这些方法。 - 方法引用和构造器引用:这使得反射...

    反射与泛型

    在Java中,泛型信息在编译后会被擦除,因此无法直接从运行时的Class对象获取泛型参数。但是,我们可以通过类的Type接口或者ParameterizedType接口来获取泛型信息。例如,如果我们有一个子类继承自DAO,我们可以通过...

    博客《反射(2):泛型相关周边信息获取》对应源码

    `ParameterizedType` 接口表示参数化的类型,它有一个重要的方法 `getActualTypeArguments()`,用于获取实际的类型参数。这些类型参数可以是具体的类、接口,或者是其他泛型类型的实例。如果类型参数是通配符(如 `?...

    java反射

    5. **ParameterizedType**: 表示参数化的类型,如泛型类或接口。 #### 三、代码解析 接下来,我们将对给定的代码片段进行详细的分析: ##### 1. 泛型工具类 `GenericsUtils` 该类提供了一系列用于处理泛型的方法...

    泛型的反射分析代码可参考复杂未看懂

    在Java中,可以使用`ParameterizedType`接口来获取带泛型的类或方法的参数类型。例如,如果你有一个泛型方法`public <T> void printList(List<T> list)`,你可以通过`method.getGenericReturnType()`获取到`...

    给公司内部培训的PPT,JAVA技术,泛型

    在某些场景下,可以通过反射获取泛型的实际类型,如 `(ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]`,但这通常不是常规操作,因为泛型信息在运行时已经被擦除,这种做法的...

Global site tag (gtag.js) - Google Analytics