如果在父类中想要获取泛型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
打印除了真的泛型的类的类型
相关推荐
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...
然而,由于类型擦除,直接通过反射访问泛型信息会受到限制,但可以通过一些间接方式获取泛型相关的类型信息。 总结来说,Java反射机制提供了强大的动态性,使得程序员可以在运行时动态地操作类和对象,而动态代理则...
在上面的代码中,我们使用 `getClass().getGenericSuperclass()` 方法获取当前类的父类,然后使用 `ParameterizedType` 对象获取泛型类型参数。最后,我们使用 `clazz.newInstance()` 方法实例化泛型对象。 完整...
- **基础**: 动态代理依赖于反射机制,通过反射获取目标对象的接口信息和方法调用。 - **增强功能**: 反射提供基础的类和方法操作能力,而动态代理则在此基础上增加了运行时的代码增强功能。 - **组合使用**: 在...
4. **泛型处理**:由于Java的泛型是类型擦除的,反射可以用来处理泛型的实际类型信息。 Java 序列化是将对象的状态转换为字节流的过程,以便可以存储或在网络中传输。以下是一些序列化的应用场景: 1. **持久化...
5. **泛型信息**:反射还可以获取到类、方法和字段上的泛型信息,但需要注意的是,由于类型擦除,这些信息只能在编译时类型信息中获取。 6. **注解处理**:反射也可以用来检查类、方法、字段是否包含特定的注解,...
反射工具类,用来访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数
5. **处理泛型和匿名类**:反射也可以帮助我们处理泛型类型和匿名类,这在进行复杂对象模型的测试时特别有用。 结合这些优势,我们可以设计一个高效的混合测试框架,包括以下组件: - **测试脚本生成器**:根据...
1. 反射:通过Class类获取对象信息,动态调用方法和字段,以及创建对象。 2. 注解:理解注解的声明、使用和元注解,以及如何自定义注解。 八、设计模式篇 23种设计模式的概述,如单例、工厂、观察者、装饰者、代理...
3. **泛型的擦除与类型检查**:由于Java泛型在编译后会进行类型擦除,反射可以帮助我们在运行时检查对象的真实类型,确保操作的正确性。 4. **注解处理**:反射可以用于读取类、方法或字段上的注解,从而实现元数据...
7. **泛型与反射**:虽然反射可以获取到带有泛型的类或方法的信息,但由于类型擦除,无法直接获取到具体的泛型类型。不过,我们可以通过方法签名和注解来间接获取。 8. **注解与反射**:Java反射可以读取类、方法、...
10. **反射机制**:了解如何在运行时动态获取类的信息,创建对象,调用方法和访问字段。 11. **枚举类型**:Java中的枚举类型是一种特殊的类,用于表示一组相关的值。 12. **泛型**:理解泛型的用途,如何定义泛型...
7. **反射机制**:运行时动态加载类、获取类信息、创建对象等。 8. **泛型**:理解泛型的概念,使用泛型类和泛型方法。 9. **JavaSE API**:熟悉并能熟练运用Java标准库提供的各种类和方法。 10. **设计模式**:了解...
12. **反射**:使用Class类获取类的信息,动态创建对象,调用方法。 13. **枚举与注解**:枚举类型的使用,注解的定义和使用,了解元注解。 14. **泛型**:泛型的概念,泛型类、泛型方法和泛型接口的应用。 15. *...
8. **反射机制**:了解如何在运行时动态获取类的信息,创建对象,调用方法。 9. **接口与抽象类**:理解接口的定义和实现,以及抽象类的用途。 10. **泛型**:学习泛型的使用,如何创建泛型类、泛型方法,以及泛型...
8. **反射机制**:在运行时动态地获取类的信息并操作类的对象。 9. **泛型**:泛型的使用,如泛型类、泛型方法、通配符等。 10. **JVM(Java虚拟机)**:了解JVM的工作原理,包括类加载机制、内存模型(堆、栈、...
- **概念**: 自动将基本数据类型转换为包装类类型的过程称为装箱;反之称为拆箱。 - **优势**: 减少代码量,提高可读性。 **5.1 增强 for 循环** - **介绍**: 一种简化数组或集合遍历的语法。 - **示例**: ```java...