JAVA基础_反射获取泛型参数类型

摘要:
我经常会想获取参数的实际类型,在Hibernate中就利用的这一点。

我经常会想获取参数的实际类型,在Hibernate中就利用的这一点。

domain: Person.java

public classPerson {


    //编号
    privateLong id;
    
    //姓名
    privateString name;
    
    

    publicPerson() {
    }

    publicPerson(Long id, String name) {
        this.id =id;
        this.name =name;
    }

    publicLong getId() {
        returnid;
    }

    public voidsetId(Long id) {
        this.id =id;
    }

    publicString getName() {
        returnname;
    }

    public voidsetName(String name) {
        this.name =name;
    }

    @Override
    publicString toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }
    
    
}

使用了泛型参数的类:GenericClass.java

public classGenericClass {

    /*** 打印人员信息
     * @parampersons
     */
    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 classGetGenericType {

    public static void main(String[] args) throwsException {
        GenericClass genericClass = newGenericClass();
        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");

    }

}

免责声明:文章转载自《JAVA基础_反射获取泛型参数类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VBA中的函数Timer用法linux(centos8):安装分布式事务服务seata(file单机模式,seata 1.3.0/centos 8.2)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#-泛型类型(十六)

概述 泛型类和泛型方法兼具可重用性、类型安全性和效率,这是非泛型类和非泛型方法无法实现的 泛型通常与集合以及作用于集合的方法一起使用 泛型所属命名空间:System.Collections.Generic 可以创建自定义泛型接口、泛型类、泛型方法、泛型事件和泛型委托,以提供自己的通用解决方案,设计类型安全的高效模式 泛型允许编写一个可以与任何数据类型一起工...

Autofac 组件、服务、自动装配 《第二篇》

Autofac 组件、服务、自动装配 《第二篇》http://www.cnblogs.com/kissdodog/p/3611799.html 一、组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1、类型创建RegisterType AutoFac能够通过反射检查一个类型,选择一个合适的...

通过实例学习C#开发中的泛型

C#中所谓泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。   C#泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。   C#泛型机制简介   C#泛型能力由CLR在运行时支持,区别于C++的编译时模板机制,和java的编译时的“搽拭法”。这...

四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStack&amp;lt;T&amp;gt;

TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.TStack 主要有三个方法、一个属性:Push(压栈)、Pop(出栈)、Peek(查看下一个要出栈的元素);Count(元素总数). pasunit Unit1;interfaceuses  Windows, Messages, SysUtils,...

为枚举类型添加描述信息 this 扩展 泛型约束 位运算[转]

为枚举类型添加描述信息 this 扩展 泛型约束 位运算 2011年10月13日 星期四 上午 10:09     在开发应用中,我们经常用枚举来简化程序。但是让人头的是总得枚举一个别名Alias用于显示或者描述该枚举值,这时候如果我们采用if或者switch的方法来进行判读也可以,但是有点不够优雅。下面来给大家分享一下我的实现方法。今天同事把博客园里的...

获取Spring容器中Bean实例的工具类(Java泛型方法实现)

在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean。 因此,实现一个获得bean实例的工具类,就很有必要。 以前,写了一个根据bean的名称和类型获取bean实例的2个工具方法,发现每次调用后,都需要强制转换成目标结果类型。 这样很不方便,突然想到可以使用Java泛型方法,实现1个新的工具方法,避免了类型转换...