今天看到一个方法,在基类中直接获取到其泛型参数的Class,如下例:
MyDao extends BaseDao<Book> {...}
通过如下方法,可以在BaseDao中通过反射的方法,得到Book.class:
Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
原文见:http://xuliangyong.iteye.com/blog/51083
分享到:
相关推荐
`GenericUtil`类中定义的`getClassOfGenricTypeParam`方法是其关键所在,该方法有两个重载版本,分别用于获取泛型参数的具体类型。第一个版本仅接受一个类对象作为参数,第二个版本额外接受一个整型索引,用于指定要...
获取泛型参数通常在子类继承泛型父类时有需求。例如,有一个泛型基类`Foo<T>`,其子类`FooChild`传入了一个具体的泛型参数`Bar`,要获取这个参数类型,通常有两种常见做法: a. 在基类中定义一个构造函数,传入...
2. **集合操作**:在泛型集合如`List<BaseClass>`中,可以存储任何子类的对象,因为它们都是`BaseClass`的实例。 3. **接口实现**:如果子类实现了某个接口,而该接口被基类引用,那么子类实例也可以被视为接口类型...
- **Bean容器**:Spring的ApplicationContext接口提供了泛型版本的getBean方法,如`ApplicationContext.getBean(Class<T> requiredType)`,这样可以确保在获取Bean时的类型安全。 - **AOP代理**:Spring支持基于...
1. **泛型参数**:CommonAdapter使用泛型定义,表示适配的数据类型。例如,`public class CommonAdapter<T> extends RecyclerView.Adapter<ViewHolder>`,这里的T代表任意数据类型,使得适配器可以适应各种类型的...
当基类是泛型时,子类也可以继承这些泛型参数。在继承泛型类时,子类可以选择约束类型参数,或者提供具体的类型。以下是一个示例: ```csharp public class DerivedGenericClass<T> : MyGenericClass { public ...
这意味着泛型信息不会出现在运行时,因此在运行时无法获取泛型类型的信息。 ##### 6.3. 在老代码中使用泛型代码 在使用泛型类时,如果类的对象是由非泛型代码创建的,则需要使用通配符。 ```java List list = new ...
在C#编程语言中,泛型集合是一种强大的工具,它允许开发者创建类型安全的数据结构,提高了代码的可读性、效率和复用性。本文将深入探讨C#中泛型集合的概念、优势以及如何使用它们。 一、泛型概述 泛型是C# 2.0引入...
泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和可读性。在`BaseDao.java`中,可能会定义一个泛型基类,如: ```java public abstract class BaseDao<T> { public...
1. 泛型约束:`List<T>`支持泛型约束,如`where T : class`限制`T`为引用类型,`where T : struct`限制为值类型,还可以定义接口约束、基类约束等。 2. 扩容机制:当列表容量不足时,`List<T>`会自动扩容。默认情况...
在泛型代码中,可以使用`default`关键字来获取类型的默认值。例如,对于值类型来说,默认值通常是0或`null`。 ```csharp public class MyClass { public T GetDefault() { return default(T); } } ``` #### 十...
例如,如果需要在泛型类中使用某个类型的方法 `MyMethod()`,我们可以约束类型参数必须继承自特定的基类或实现特定的接口。 ```csharp public class MyClass<T> where T : IMyInterface { public void DoSomething...
然而,在实际应用泛型的过程中,经常会遇到一些与类型兼容性相关的问题,例如当涉及到子类与父类的关系时。本文将详细介绍如何通过使用通配符的上界和下界来解决这些问题。 #### 1. 为什么需要通配符和边界? 假设...
3. **类型约束**:如果需要对`T`进行特定的限制,比如它必须继承自某个基类或实现某个接口,我们可以在泛型声明中添加类型约束,如`class FreeFlyDataFactory<T extends IData>`。 4. **使用工厂**:在客户端代码中...
此外,编译器还允许显式强制转换泛型参数到其他接口,但不能转换到非约束的类。 ```csharp interface ISomeInterface { } class SomeClass { } class MyClass { public void SomeMethod(T t) { ISomeInterface ...
- 泛型是在编译时提供类型安全检查的一种机制,允许在类、接口和方法中使用类型参数,避免了强制类型转换的麻烦,提高了代码的可读性和安全性。 - 泛型类可以定义一个通用的数据类型T,实例化时可以指定具体的类型...
- **对象的getClass()**:任何对象都可以通过`getClass()`方法获取其对应的Class对象,这是最直接的方式。 - **类字面常量**:使用`ClassName.class`直接获取Class对象,这种方式不会导致类的初始化。 3. **使用...
在这个例子中,`findByCriteria`方法接受一个Criteria对象作为参数,而`findByExample`方法使用了Example对象来构造查询,根据实体类对象的属性匹配数据库中的记录。 总结起来,"Spring Hibernate 泛型DAO"的主题...
- 泛型在编译后会擦除,反射获取的`Class`对象并不包含泛型信息,但可以通过类型参数获取实际类型。 8. 性能考虑: - 反射虽然强大,但其性能通常低于直接的静态调用。因此,对于性能敏感的代码,应谨慎使用反射...