`
zhaojian0910
  • 浏览: 47534 次
社区版块
存档分类
最新评论

通过反射技术,获取泛型类的真实类型

阅读更多

如果在父类中想要获取泛型T的类型 

T.class; 

T.getClass(); 

这两种方法都是无法实现的,因为泛型T不是一个真正的类或者实例

下面的代码将介绍如何通过反射获得泛型T的真实的类的类型

 

import java.lang.reflect.ParameterizedType;

@SuppressWarnings("unchecked")
public class Base<T> {
	/**
	 * 如果在父类中想要获取泛型T的类型 
	 * T.class; 
	 * T.getClass(); 
	 * 这两种方法都是无法实现的,因为泛型T不是一个真正的类或者实例
	 */

	private Class<T> clazz;

	// 通过反射技术,获取泛型类的真实类型
	public Base() {

		ParameterizedType pt = (ParameterizedType) this.getClass()
				.getGenericSuperclass();// 这里面的this代表的是子类的实例
		this.clazz = (Class<T>) pt.getActualTypeArguments()[0];// 获取第一个类型参数的真实类型
		System.out.println("---> clazz : " + this.clazz);
	}

}

 

public class User extends Base<User> {

}

 

public class Role extends Base<Role> {

}

 

import org.junit.Test;

public class TestGeneric {
	@Test
	public void test(){
		User user = new User();
		Role role = new Role();
	}
}

 输出:

---> clazz : class User

---> clazz : class Role

打印除了真的泛型的类的类型

分享到:
评论

相关推荐

    java 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class

    提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...

    JAVA 反射详解PPT

    然而,由于类型擦除,直接通过反射访问泛型信息会受到限制,但可以通过一些间接方式获取泛型相关的类型信息。 总结来说,Java反射机制提供了强大的动态性,使得程序员可以在运行时动态地操作类和对象,而动态代理则...

    Java让泛型实例化的方法

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

    JAVA反射机制与动态代理续一.rar

    - **基础**: 动态代理依赖于反射机制,通过反射获取目标对象的接口信息和方法调用。 - **增强功能**: 反射提供基础的类和方法操作能力,而动态代理则在此基础上增加了运行时的代码增强功能。 - **组合使用**: 在...

    2020版Java反射 4 道.pdf

    4. **泛型处理**:由于Java的泛型是类型擦除的,反射可以用来处理泛型的实际类型信息。 Java 序列化是将对象的状态转换为字节流的过程,以便可以存储或在网络中传输。以下是一些序列化的应用场景: 1. **持久化...

    代理与反射

    5. **泛型信息**:反射还可以获取到类、方法和字段上的泛型信息,但需要注意的是,由于类型擦除,这些信息只能在编译时类型信息中获取。 6. **注解处理**:反射也可以用来检查类、方法、字段是否包含特定的注解,...

    ReflectUtils.java

    反射工具类,用来访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数

    基于Java反射的APP自动化混合测试框架的研究与实现.zip

    5. **处理泛型和匿名类**:反射也可以帮助我们处理泛型类型和匿名类,这在进行复杂对象模型的测试时特别有用。 结合这些优势,我们可以设计一个高效的混合测试框架,包括以下组件: - **测试脚本生成器**:根据...

    java面试题大全 有中兴华为内部资料, 内容真实,

    1. 反射:通过Class类获取对象信息,动态调用方法和字段,以及创建对象。 2. 注解:理解注解的声明、使用和元注解,以及如何自定义注解。 八、设计模式篇 23种设计模式的概述,如单例、工厂、观察者、装饰者、代理...

    Java通用代码-反射的力量

    3. **泛型的擦除与类型检查**:由于Java泛型在编译后会进行类型擦除,反射可以帮助我们在运行时检查对象的真实类型,确保操作的正确性。 4. **注解处理**:反射可以用于读取类、方法或字段上的注解,从而实现元数据...

    Reflect:学习java反射机制

    7. **泛型与反射**:虽然反射可以获取到带有泛型的类或方法的信息,但由于类型擦除,无法直接获取到具体的泛型类型。不过,我们可以通过方法签名和注解来间接获取。 8. **注解与反射**:Java反射可以读取类、方法、...

    scjp模拟器

    10. **反射机制**:了解如何在运行时动态获取类的信息,创建对象,调用方法和访问字段。 11. **枚举类型**:Java中的枚举类型是一种特殊的类,用于表示一组相关的值。 12. **泛型**:理解泛型的用途,如何定义泛型...

    等级考试java上机模拟软件

    7. **反射机制**:运行时动态加载类、获取类信息、创建对象等。 8. **泛型**:理解泛型的概念,使用泛型类和泛型方法。 9. **JavaSE API**:熟悉并能熟练运用Java标准库提供的各种类和方法。 10. **设计模式**:了解...

    java 310-055 v2.29考试系统

    12. **反射**:使用Class类获取类的信息,动态创建对象,调用方法。 13. **枚举与注解**:枚举类型的使用,注解的定义和使用,了解元注解。 14. **泛型**:泛型的概念,泛型类、泛型方法和泛型接口的应用。 15. *...

    自考JAVA语言程序设计4747试卷及答案(补充最新试卷)

    8. **反射机制**:了解如何在运行时动态获取类的信息,创建对象,调用方法。 9. **接口与抽象类**:理解接口的定义和实现,以及抽象类的用途。 10. **泛型**:学习泛型的使用,如何创建泛型类、泛型方法,以及泛型...

    SCJP6.0模拟器

    8. **反射机制**:在运行时动态地获取类的信息并操作类的对象。 9. **泛型**:泛型的使用,如泛型类、泛型方法、通配符等。 10. **JVM(Java虚拟机)**:了解JVM的工作原理,包括类加载机制、内存模型(堆、栈、...

    传智播客 方立勋 javaweb 完全笔记

    - **概念**: 自动将基本数据类型转换为包装类类型的过程称为装箱;反之称为拆箱。 - **优势**: 减少代码量,提高可读性。 **5.1 增强 for 循环** - **介绍**: 一种简化数组或集合遍历的语法。 - **示例**: ```java...

Global site tag (gtag.js) - Google Analytics