首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何通过Java反射获取泛型类型信息

    {//......} (2)在类里面使用一个泛型类 比如在Java的LinkedList的源码中,有两个成员变量定义如下,分别代表链表的头和尾: transient Node first...; transient Node last; ok,在上面的两种场景中,第一种场景在类和接口上声明的泛型,在运行时反射该类,是没法知道其参数信息的,包括对象本身也不知道它的泛型是什么。...不能通过发射获取泛型类型信息的场景有二个,分别是: (1)类或接口声明的泛型信息 (2)局部变量的泛型信息 获取方法返回值的泛型类型 如下面定义的一个测试类: public class MyClass...){ ParameterizedType parameterizedType=(ParameterizedType) genericsFieldType; Type...){ ParameterizedType parameterizedType=(ParameterizedType)genericType; Type

    9.3K21

    细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)

    此时,所有的原始类型都通过字节码文件类Class类进行抽象。Class类的一个具体对象就代表一个指定的原始类型 泛型出现之后,扩充了数据类型。...**Class —— 反射基石 其意义为:类的抽象,即对“类”做描述:比如类有修饰、字段、方法等属性,有获得该类的所有方法、所有公有方法等方法。...那我们其实就可以通过定义类的方式,在类信息中保留泛型信息,从而在运行时获得这些泛型信息。...) parameterizedType.getActualTypeArguments()[0]; } // 省略具体的操作.... } 说明:Class类有两个"雷同"的方法:...此时,所有的原始类型都通过字节码文件类Class类进行抽象。Class类的一个具体对象就代表一个指定的原始类型。 泛型出现之后,也就扩充了数据类型。

    3.2K10

    基础篇:深入解析JAVA泛型

    1 JAVA的Type类型体系 先了解下java的Type类型体系(类的类=>类型),Type是所有类型(原生类型-Class、参数化类型-Parameterizedtype、数组类型-GenericArrayType...Type下面又有四个子接口类ParameterizedType、TypeVariable、GenericArrayType、WildcardType List表示泛型,E是TypeVariable...,可以是已知类(Integer、String等),也可以用子类自己的泛型参数指定 泛型被继承时,且指定父类泛型参数,则额外生成的ParameterizedType类型作为子类的父类;如果没有指定父类泛型参数...) // 2 获取在类内部定义的泛型属性,需指定具体泛型参数 // 3 局部代码,可以通过泛型的匿名内部子类(需指定具体泛型参数)获取ParameterizedType类型 public class MainTest...但是泛型类+具体参数转变的ParameterizedType(参数化类型)是不存在继承关系;即Object是String的父类,但是List和List的类型是不同的两个ParameterizedType

    1.4K20

    泛型,有点难度,会让很多人懵逼,那是因为你没有看这篇文章!

    泛型变量可以在类和方法中进行声明,从上面类图中也可以看出来,java中任何类可以使用Class对象表示,方法可以用Method类表示,类图中可以知,Class类和Method类实现了GenericDeclaration...class对象,通过Class对象可以获取类或者接口中的任何信息,比如:类名、类中声明的泛型信息、类的修饰符、类的父类信息、类的接口信息、类中的任何方法信息、类中任何字段信息等等。...instanceof ParameterizedType) {//@6 ParameterizedType parameterizedType = (ParameterizedType...@4:输出了genericSuperclass变量的类型,注意上面第2行输出:ParameterizedTypeImpl,这个是ParameterizedType接口的一个实现类。...instanceof ParameterizedType) { //@4 ParameterizedType parameterizedType = (ParameterizedType

    99720

    父类通过泛型获得子类Class类型 以及Type体系

    ,如果父类的方法中需要知道具体子类的Class类型 则可以直接使用Child来使用;   此处的原理就是在子类继承父类的时候 带有泛型 然后子类在创建的时候,会调用父类的构造函数,构造函数中存在this...指的的是子类,然后通过获得父类,再获得父类的泛型 ;通过泛型找到子类类型; 3、原理分析   该实现是通过反射技术实现;下面看具体的分析; 3、1 ParameterizedType 类 ParameterizedType...pType = (ParameterizedType) maps.getClass().getGenericSuperclass();//获得HashMap的父类 System.out.println...Class)的区别 3、2 Type类    Type是java类型信息体系中的顶级接口,其中Class就是Type的一个直接实现类。...ParameterizedType parameterizedType = (ParameterizedType) type; Type[] actualTypeArguments

    5K20

    深入分析Java反射(三)-泛型

    既然Java虚拟机中不存在泛型,那么为什么可以从JDK中的一些类库获取泛型信息?...这是因为类文件(.class)或者说字节码文件本身存储了泛型的信息,相关类库(可以是JDK的类库,也可以是第三方的类库)读取泛型信息的时候可以从字节码文件中提取,例如比较常用的字节码操作类库ASM就可以读取字节码中的信息甚至改造字节码动态生成类...> list; class MyClass{ } 而像下面的忽略泛型参数或者基本数据类型和基本数据类型的包装类都不是ParameterizedType: String name = "throwbale...//获取父类泛型类型数组 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();...Type[] getBounds():获得该类型变量的上限(上边界),若无显式定义(extends),默认为Object,类型变量的上限可能不止一个,因为可以用&符号限定多个(这其中有且只能有一个为类或抽象类

    1.6K20
    领券