获取泛型类型

1 private Class<T> clz;
 2  @SuppressWarnings("unchecked")
 3  public Class<T> getClz() {
 4   if (clz == null) {
 5    // 获取泛型的Class对象
 6    clz = ((Class<T>) (((ParameterizedType) (this.getClass()
 7      .getGenericSuperclass())).getActualTypeArguments()[0]));
 8   }
 9   return clz;
10  }

时间: 2024-08-29 04:22:37

获取泛型类型的相关文章

获取泛型类型工具类

Java泛型在编译阶段会进行泛型擦除,所以能够在运行期获得的泛型是在编译阶段已经确定(继承的泛型类)了的. 1 public class GenricUtils { 2 /** 3 * 获得泛型类型 4 * @param clz 5 * @return 6 */ 7 public static <T> Class<T> getGenricClassType(Class clz){ 8 Type type = clz.getGenericSuperclass(); 9 if(type

TypeToken获取运行时泛型类型

最近正好使用到了guava的TypeToken来获取泛型类型 使用方法: return new TypeToken<T>(thisClass) {}.getRawType(); 网上冲了一浪,发现关于泛型,有前人给出的总结: Java泛型有这么一种规律: 位于声明一侧的,源码里写了什么到运行时就能看到什么: 位于使用一侧的,源码里写什么到运行时都没了. 正好印证了TypeToken的实现思路: 先创建一个TypeToken<T>的匿名继承类(属于类的申明),从而 getClass(

夯实JAVA基本之二 —— 反射(2):泛型相关周边信息获取

前言:坚信自己坚信的,坚持自己坚持的,永远选择相信自己. 在上篇中,我们简单给大家讲解了如何利用反射来获取普通类型的类的使用,今天给大家讲解下,有关如何使用反射来获取泛型中的信息.提前提个醒,本篇文章内容稍难,大家可能需要多看几篇.这篇文章将大量用到泛型的知识,如果对泛型声明及填充不太了解的同学,请先看完<夯实JAVA基本之一 -- 泛型详解系列> 一.获取泛型超类和接口的相信信息 在这部分内容中,我们将讲述如何获取泛型的超类和接口,把上篇中遗留下来的两个函数先讲完. 1.获取泛型超类相信信息

Java使用反射来获取成员变量泛型信息

Java通过指定类对应的Class对象,程序可以获得该类里包括的所有Field,不管该Field使用private修饰,还是使用public修饰.获得了Field对象后,就可以很容易的获得该Field的数据类型,例如,下面的代码便是获得该Field对象foeld的类型: Class<?> type = field.getType(); 但是通过这种方式只对普通类型的Field有效,如果该Field的类型是有泛型限制的类型,如Map<String,Integer>类型,则不能准确得到

180530-反射获取泛型类的实际参数

文章链接:https://liuyueyi.github.io/hexblog/2018/05/30/180530-通过反射获取泛型类的实际参数/ 反射获取泛型类的实际参数 泛型用得还是比较多的,那么如何获取泛型类上实际的参数类型呢? 比如一个接口为 public interface IBolt<T, K> { } 现在给一个IBolt的具体实现类,可以获取到实际的参数类型么?下面几种case可以怎么获取实际的IBolt中的T和K类型呢? // 实现接口方式 public class ABol

java 通过反射获取类属性结构,类方法,类父类及其泛型,类,接口和包

首先自定义三个类 package reflection1; public interface MtInterface { void info(); } package reflection1; import java.io.Serializable; public class Creature<T> implements Serializable { private char gender; public double weight; private void breath() { Syste

反射工具类——ReflectUtils

测试方法:根据已知的方法名,来反射调用方法 package com.redmoon.forum.job; import java.util.ArrayList; import java.util.List; import com.common.utils.ReflectUtils; public class Test { private String name; public String getName() { return name; } public void setName(String

Model元数据解析

Model 元数据是针对数据类型的一种描述信息,主要用于控制数据类型本身及其成员属性在界面上的呈现方式,同时也为Model 绑定和验证提供必不可少的元数据信息.一个复杂数据类型通过属性的方式定义了一系列的数据成员,而Model 元数据不仅仅是数据类型本身的描述,对数据成员的描述也包含其中,所以Model 元数据具有一个层次化结构. AdditionalMetadataAttribute定义的值放在元数据的AdditionalValues中.实现接口IMetadat aAware ModelMet

深入理解C#泛型

前面两篇文章介绍了C#泛型的基本知识和特性,下面我们看看泛型是怎么工作的,了解一下泛型内部机制. 泛型内部机制 泛型拥有类型参数,通过类型参数可以提供"参数化"的类型,事实上,泛型类型的"类型参数"变成了泛型类型的元数据,"运行时"在需要的时候会利用他们构造恰当的类型,通过这些类型,我们有可以实例化不同类型的对象.也就是说,未绑定泛型类型是以构造泛型类型的蓝图,已构造泛型类型又是实际对象的蓝图. 分析泛型IL代码 下面看一个例子,在这个例子中定义