通过getGenericSuperclass方法可以获取当前对象的直接超类的 Type
package cn.tzz.lang.clazz; public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class BaseHibernateDao<T,ID extends Serializable> { private Class<T> clazz; public BaseHibernateDao(){ //当前对象的直接超类的 Type Type genericSuperclass = getClass().getGenericSuperclass(); if(genericSuperclass instanceof ParameterizedType){ //参数化类型 ParameterizedType parameterizedType= (ParameterizedType) genericSuperclass; //返回表示此类型实际类型参数的 Type 对象的数组 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); this.clazz= (Class<T>)actualTypeArguments[0]; }else{ this.clazz= (Class<T>)genericSuperclass; } } public Class<T> getClazz() { return clazz; } }
public class UserService extends BaseHibernateDao<User, Integer>{ }
public class TestUserService { public static void main(String[] args) { UserService userService = new UserService(); System.out.println(userService.getClass()); } }
运行结果:
class cn.tzz.lang.clazz.User
相关推荐
下面我们将详细探讨Java反射的基本方法及其应用。 一、获取类信息 1. `Class` 类:反射的核心是`Class`类,它代表一个Java类。通过`Class`对象,我们可以获取到类的元数据。获取`Class`对象的方法有: - 使用`...
首先,我们使用`getClass()`方法获取当前类的Class对象,然后使用`getGenericSuperclass()`方法获取当前类的父类的Type对象。最后,我们使用`getActualTypeArguments()`方法获取Type对象中的实际类型参数,然后将其...
Java中的反射(Reflect)是Java语言的一个重要特性,它允许运行时访问类的信息,包括类名、属性、方法等,并可以动态地创建对象和调用方法。反射在很多场景下非常有用,比如在框架开发、插件系统、元数据驱动编程等...
Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...
在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: Java反射机制允许程序在运行时获取关于类、接口、字段和方法的信息,并且能够动态地调用方法和修改字段值。这极大地增强...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时访问类的信息,并能够动态地创建对象、调用方法以及获取字段值等。这种能力对于框架设计、代码生成等场景具有重要意义。 #### 二、反射...
6. **泛型处理**:虽然Java的泛型在运行时被擦除,但反射可以提供一些关于类型参数的信息,如`getGenericSuperclass()`和`getGenericInterfaces()`方法。 7. **接口实现检查**:通过`isInstance()`方法,我们可以...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这种能力使得Java开发者能够在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用...
Java泛型深入的内容涵盖泛型的基本概念、泛型类、接口、方法以及泛型的使用限制和高级特性。 首先,Java中的泛型允许定义方法、接口、类和变量时不指定具体的数据类型,而是在使用的时候再通过泛型类型参数来指定...
综上所述,Java泛型的进阶使用涉及多个方面,包括通配符、边界、类型擦除、泛型方法等,这些都对编写高效、安全的代码有着重要作用。理解并熟练掌握这些概念,将有助于提高Java开发的效率和质量。在实际开发中,我们...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...
- 接着,方法会检查获取到的类型是否为`ParameterizedType`类型,这是Java泛型体系中表示参数化类型的接口。如果不是,则同样返回`Object.class`。 - 如果类型检查通过,方法会继续提取实际的类型参数数组,并根据...
在上述例子中,`LoggingInvocationHandler`实现了`InvocationHandler`接口,当通过代理对象调用`doSomething()`方法时,实际上会先执行`invoke()`方法中的逻辑,即打印"Before method call",然后调用实际对象的方法...
最后,我们在 `main` 方法中创建了一个 `UserDao` 对象,并打印出其 toString 结果。 结论 ---------- 在本文中,我们详细介绍了 Java 让泛型实例化的方法。我们了解了泛型擦除机制的原理,并学习了使用反射机制...
虽然Java泛型在编译后会被擦除,但反射仍可以提供一些关于泛型类型的信息,如`getGenericSuperclass()`和`getGenericInterfaces()`方法可获取带有类型参数的父类和接口信息。 七、异常处理 在使用反射时,需要注意...
在Java 5引入之前,集合框架中的元素类型均为`Object`,这意味着开发者必须频繁地使用类型转换,并且容易出现运行时异常。为了提高类型安全性并减少代码冗余,Java 5引入了泛型(Generics Programming, GP)的概念。...
5. **处理泛型**:虽然Java的泛型在编译后会被擦除,但反射仍然可以提供关于泛型类型的信息,如`getGenericSuperclass()`和`getGenericInterfaces()`等方法。 6. **Java集合的类型安全**:在处理集合时,反射可以...
泛型是Java编程语言中的一个重要特性,首次引入于JDK 1.5版本。它允许在定义类、接口和方法时使用类型参数,从而增强了代码的类型安全性和可读性。泛型的主要目的是减少类型转换的繁琐过程,并在编译阶段捕获潜在的...
#### 二、Type在`java.lang`中的使用 - **返回Type的方法**: - `Class<T> getClass()`:获取对象所属类的Class对象,该对象包含了关于类的信息。 - `Type getGenericSuperclass()`:获取类的直接超类的类型。 -...