`
lichaozhangobj
  • 浏览: 100869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多
/**  
     * 通过反射,获得指定类的父类的泛型参数的实际类型. 如BuyerServiceBean extends DaoSupport<Buyer>  
     *  
     * @param clazz clazz 需要反射的类,该类必须继承范型父类
     * @param index 泛型参数所在索引,从0开始.  
     * @return 范型参数的实际类型, 如果没有实现ParameterizedType接口,即不支持泛型,所以直接返回<code>Object.class</code>
     */  
    @SuppressWarnings("unchecked")
	public static Class getSuperClassGenricType(Class clazz, int index) {    
        Type genType = clazz.getGenericSuperclass();//得到泛型父类  
        //如果没有实现ParameterizedType接口,即不支持泛型,直接返回Object.class   
        if (!(genType instanceof ParameterizedType)) {
            return Object.class;   
        }  
        //返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class, 如BuyerServiceBean extends DaoSupport<Buyer,Contact>就返回Buyer和Contact类型   
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();                   
        if (index >= params.length || index < 0) { 
        	 throw new RuntimeException("你输入的索引"+ (index<0 ? "不能小于0" : "超出了参数的总数"));
        }      
        if (!(params[index] instanceof Class)) {
            return Object.class;   
        }   
        return (Class) params[index];
    }

 

分享到:
评论

相关推荐

    java中获取泛型类的子类

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

    Java-泛型.ppt

    - 泛型方法的类型参数可以与类的泛型参数相同,但互不影响。 #### 四、类型通配符 类型通配符允许我们编写更灵活的代码。常见的类型通配符包括: - **无界通配符**:`&lt;?&gt;`,表示任何类型。 - **上界通配符**:`...

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

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

    泛型编程小实例(以List为例)

    泛型编程是Java、C#等面向对象编程语言中的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而实现代码的复用并提供编译时的类型安全检查。本教程将以Java中的List接口为例,深入探讨泛型编程的概念、...

    实例讲解Java泛型编程的快速入门

    - 泛型类实例化:创建泛型类的实例时,需要指定类型参数的实际类型,如`TestGen, Integer&gt; t = new TestGen, Integer&gt;();` 2. **泛型通配符** - 无界通配符:`?`表示任何类型,但无法在方法内部进行添加操作,...

    第十三章 泛型程序设计

    - 泛型方法可以在类的任何地方定义,与类的泛型参数无关,如`public &lt;T&gt; void printList(List&lt;T&gt; list) {...}`,`printList()`方法接受任何类型的列表。 4. **通配符(Wildcard)** - 用于表示对类型参数的限制,...

    java 泛型入门 实例

    - 当子类继承泛型父类时,可以指定不同的类型参数,实现多态性。 - 也可以使用类型参数`&lt;?&gt;`来表示父类的泛型类型不确定,这样在子类中可以操作父类的方法,但不能访问具体的泛型类型信息。 7. **野指针警告** -...

    Java中泛型的各种使用

    由于类型擦除,泛型类不能覆盖或实现具有相同类型参数的非泛型方法。例如,`List&lt;String&gt;`不能覆盖`List&lt;Object&gt;`的方法,因为它们在运行时被视为相同的类型。 10. 泛型和序列化 泛型类默认是不可序列化的,除非...

    重新理解Java泛型

    - **泛型类**:泛型类是在类定义时引入类型参数的,如`Box&lt;T&gt;`中的`T`,它代表一个未指定的具体类型。这种设计使得类能够处理不同类型的对象,而不必为每种类型创建单独的类。例如,`Box&lt;Integer&gt;`、`Box&lt;Double&gt;`...

    泛型完整代码.zip

    泛型允许我们在定义类、接口和方法时指定一种或多种类型,这种类型可以是任何引用类型,包括基本类型的包装类。使用泛型的主要目标是限制对象的类型,确保在编译时就能检测到可能的类型错误,而不是在运行时抛出异常...

    Java泛型PPT教案学习.pptx

    例如,一个通用的交换两个元素的方法可以声明为`public static &lt;T&gt; void swap(T[] arr, int i, int j)`,这里的T是方法的泛型参数,允许传入任何类型的数组。 4. **泛型通配符**: 在处理多种类型但又不想为每种...

    Java1.5泛型指南

    在定义泛型类或接口时,声明的类型参数被称为形式类型参数(Formal Type Parameter),而在创建实例或调用方法时使用的具体类型则称为实际类型参数(Actual Type Parameter)。如上例中的`T`是形式类型参数,而`...

    Java 1.5 反射机制

    通过`Type`接口及其子接口,如`ParameterizedType`和`GenericArrayType`,可以获取到泛型的实际类型参数。 7. 在Hibernate中的应用 Hibernate是一个流行的Java ORM(对象关系映射)框架,反射机制在其中发挥了关键...

    Java泛型技术之发展.pdf

    - **边界**:通过`extends`或`super`关键字设定类型参数的上下界,如`List&lt;? extends Number&gt;`只允许添加Number或其子类,`List&lt;? super Integer&gt;`则可以添加Integer或其父类。 - **类型擦除**:Java泛型在编译后...

    反射(Refection)实现镜像对象封装库.zip

    6. **泛型处理**:虽然反射不能直接处理泛型类型信息,但可以通过获取类的实际类型参数来间接实现,例如`TypeVariable`和`ParameterizedType`接口。 7. **注解处理**:反射也支持检查类、方法、字段上的注解,通过`...

    第1章 泛型+ppt+pdf+例子

    泛型允许程序员在定义类、接口和方法时,指定一个或多个类型参数,这些参数在实际使用时会被具体的类型替换。这样做不仅增强了编译时的检查,减少了类型转换的需要,还避免了运行时可能出现的ClassCastException。 ...

    Java反射案例

    虽然Java反射不能直接获取到泛型的实际类型,但是可以通过方法签名或者字段类型获取到擦除后的边界类型。 6. **接口与实现类**: 反射也可以用来检查一个类是否实现了特定的接口,通过`Class.getInterfaces()`...

    java的反射机制的应用实例

    5. **泛型处理**:虽然Java反射不能直接处理泛型信息,但可以通过获取参数类型的原始类型来间接处理。例如,`ParameterizedType parameterType = (ParameterizedType) method.getGenericReturnType();`可以获取到...

    Java泛型资料

    泛型允许程序员在定义类、接口和方法时指定类型参数,使得在编译时期就能检查类型错误,而不再需要在运行时进行强制类型转换,从而减少了潜在的ClassCastException。 1. **泛型的基本概念** - 类型参数:在类、...

    Java反射常用机制

    5. **遍历类层次**:通过`getSuperclass()`方法可以获取类的父类,`getInterfaces()`方法获取实现的接口,这有助于构建类的继承关系图。 6. **泛型处理**:虽然Java的反射不直接支持泛型,但可以通过`...

Global site tag (gtag.js) - Google Analytics