/**
* 通过反射, 获得Class定义中声明的父类的泛型参数的类型.
* 如无法找到, 返回Object.class.
*
* 如public UserDao extends HibernateDao<User,Long>
*
* @param clazz clazz The class to introspect
* @param index the Index of the generic ddeclaration,start from 0.
* @return the index generic declaration, or Object.class if cannot be determined
*/
public static Class getSuperClassGenricType(final Class clazz, final int index) {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "
+ params.length);
return Object.class;
}
if (!(params[index] instanceof Class)) {
logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
return Object.class;
}
return (Class) params[index];
}
分享到:
相关推荐
本教程聚焦于通过反射获取运行时类的父类以及父类中的泛型信息。这是一项高级技能,对理解和调试复杂的Java应用程序尤其有用。 首先,我们来理解什么是反射。在Java中,类、接口和方法等都是由类对象表示的,这些类...
Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析。 一、泛型的基本概念 泛型是Java 5中...
Java编程语言中的反射和泛型是两个非常重要的概念,它们为开发者提供了强大的工具来操作类、接口、对象以及参数类型。在"myreflect.rar"这个压缩包中,我们可以期待找到一系列关于这两个主题的源代码示例,这将有助...
总结来说,`ReflectionUtil`工具类提供了一种方便的方式来处理Java泛型和反射操作,包括从`Type`获取`Class`对象,创建对象实例,以及获取泛型参数类型等。在实际开发中,正确、安全地使用反射对于提高代码的灵活性...
泛型是在定义类、接口或方法时使用的类型参数,用尖括号 `<T>` 表示。`T` 是一个占位符,代表一个具体的类型,在实际使用时会被具体的类型如 `String` 或 `Integer` 替换。泛型的主要好处在于编译时检查类型安全,...
泛型编程是Java、C#等面向对象编程语言中的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而实现代码的复用并提供编译时的类型安全检查。本教程将以Java中的List接口为例,深入探讨泛型编程的概念、...
- 也可以使用类型参数`<?>`来表示父类的泛型类型不确定,这样在子类中可以操作父类的方法,但不能访问具体的泛型类型信息。 7. **野指针警告** - 在未使用泛型的旧代码中,可能会出现“可能的不匹配类型”警告。...
- 泛型方法的类型参数可以与类的泛型参数相同,但互不影响。 #### 四、类型通配符 类型通配符允许我们编写更灵活的代码。常见的类型通配符包括: - **无界通配符**:`<?>`,表示任何类型。 - **上界通配符**:`...
- 泛型方法可以在类的任何地方定义,与类的泛型参数无关,如`public <T> void printList(List<T> list) {...}`,`printList()`方法接受任何类型的列表。 4. **通配符(Wildcard)** - 用于表示对类型参数的限制,...
- 泛型方法的类型参数独立于类的类型参数,因此可以在非泛型类中定义泛型方法。 5. **类型擦除** - Java泛型在编译后会进行类型擦除,这意味着在运行时,所有的泛型类型信息都会被替换为它们的边界类型或`Object`...
例如,一个通用的交换两个元素的方法可以声明为`public static <T> void swap(T[] arr, int i, int j)`,这里的T是方法的泛型参数,允许传入任何类型的数组。 4. **泛型通配符**: 在处理多种类型但又不想为每种...
在运行时,可以使用类字面量(Class Literals)来获取泛型类型的 Class 对象,这在反射和动态类型操作中尤为重要。 #### 9. 更多通配符的乐趣 通配符不仅限于基本使用,还可以进行复杂的匹配,例如捕获(Wildcard ...
在定义泛型类或接口时,声明的类型参数被称为形式类型参数(Formal Type Parameter),而在创建实例或调用方法时使用的具体类型则称为实际类型参数(Actual Type Parameter)。如上例中的`T`是形式类型参数,而`...
1. **泛型类**:泛型类是在类定义时引入类型参数,例如`public class Box<T> { T item; }`,这里的`T`就是一个类型参数,代表任意类型。在实例化泛型类时,我们可以指定具体的类型,如`Box<String> box = new Box();...
2. 泛型类:泛型类是在类定义中使用类型参数的,例如`ArrayList<T>`。泛型类的实例化需要提供具体的类型,如`ArrayList<String>`。 3. 泛型方法:除了泛型类,我们还可以在方法中使用类型参数,比如`public <T> ...
- 泛型(Generics)允许在定义类、接口和方法时声明类型参数,从而创建泛型类、泛型接口和泛型方法。这使得代码可以处理多种类型的对象,而不必为每种类型都创建单独的类或方法。 - 类型参数通常以大写字母表示,...
7. 类字面量作为运行时类型令牌:可以使用.class语法获取泛型类型的Class对象,这对于反射和类型检查很有用。 8. 通配符捕获:是一个高级特性,它允许泛型代码使用某些特定的通配符类型,这在复杂的泛型代码中非常...
在Java中,泛型允许我们在定义类、接口和方法时使用类型参数,而不是具体的类型,从而实现对多种类型的支持。这样做可以防止在运行时出现ClassCastException,并在编译时就捕获潜在的类型不匹配错误。 1. **泛型的...
结合泛型和反射,我们可以创建通用的DAO实现,通过运行时动态获取类型参数,执行相应的数据库操作。反射API允许程序在运行时检查类、接口、字段和方法的信息,并可动态调用方法或修改字段值。泛型的使用可以确保在...