下面的代码可以让你在抽象的泛型类里面获取到泛型的类型
abstract class A<T> {
Class<T> clazz;
void doGetClass() {
Type genType = this.getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
this.clazz = (Class<T>) params[0];
}
}
1,当然上面的代码不是万能的,只有实例化了T的子类才可以按上述方法获得T,如果子类没有实例化T的话,是无法获取的。
比如有:
//class B并没有实例化T。
class B<T> extends A<T>{
...
}
由于class B并没有实例化T,所有下面的代码拿不到String.class:
B<String> b = new B<String>();
b.doGetClass();//拿不到String
2,正确的做法:
class B extends A<String>{
}
B按上面方式声明,下面代码可以拿到String.class:
B b = new B();
b.doGetClass();// b.clazz is String.class
2的做法可以在Hibernate里面看到它的用处。
分享到:
相关推荐
例如,我们可以定义一个泛型接口`IGenericCollection<T>`,要求实现它的类必须提供添加、删除和获取元素的方法: ```csharp public interface IGenericCollection { void Add(T item); void Remove(T item); T ...
在示例文件`GenericRTTI.java`中,很可能是展示了一些如何在运行时识别泛型类类型的具体实现。同时,`Java.jpg`可能是对这个概念的一个图形化解释或者示例的截图。通过学习和理解这些示例,你可以更好地掌握Java泛型...
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
`GenericUtil`类中定义的`getClassOfGenricTypeParam`方法是其关键所在,该方法有两个重载版本,分别用于获取泛型参数的具体类型。第一个版本仅接受一个类对象作为参数,第二个版本额外接受一个整型索引,用于指定要...
在Java编程语言中,继承是...总之,Java中的继承是非泛型类和泛型类共有的特性,允许子类获取并扩展父类的功能。在实际编程中,理解如何正确地继承和使用非泛型类是至关重要的,这有助于构建灵活且易于维护的代码结构。
介绍获取方法的参数和返回值类型(包括Type和Class)获取泛型参数类型(包括对象的泛型参数或集合元素的泛型类型)方法首先我们定义一个类:public cla
泛型类是泛型的一种应用,可以在多个不同的数据类型上工作,提供了更高的类型安全性和性能。本篇文章将深入探讨如何在C#中使用和继承泛型类。 首先,让我们理解什么是泛型类。泛型类是一种模板或蓝图,它定义了参数...
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
泛型允许我们在类、接口和方法中使用类型参数,这样在编译时期就能检查类型匹配,减少运行时类型转换异常。 1. **泛型的基本概念** - 泛型的本质是在类、接口或方法中使用类型参数,让它们能够处理多种数据类型。...
通过反射获得指定类的父类的泛型参数的实际类型
泛型类是含有类型参数的类,它可以在创建对象时指定具体的类型,从而在编译时期就能进行类型检查,避免了运行时的ClassCastException。在Java中,我们可以这样定义一个泛型类: ```java public class Generic...
- 反射API在泛型类型擦除后仍然能获取到泛型信息,这主要通过泛型类的类型参数的实际类型参数化实例(TypeToken)来实现。 - 这使得在运行时可以进行一些泛型相关的操作,如创建参数化的类实例。 总结来说,Java...
数据工厂泛型类是软件开发中的一个重要概念,它结合了数据工厂模式和泛型编程的特点,为创建对象提供了一种灵活且类型安全的方式。在Java、C#等面向对象编程语言中,泛型类被广泛使用,以提高代码的可重用性和减少...
上述代码定义了一个名为`ItemList<T>`的泛型类,它可以存储任何类型的对象,并提供了添加和获取对象的方法。这种自定义泛型类可以根据具体的业务需求灵活扩展功能。 通过以上分析,我们可以看出泛型和泛型集合类在...
注意,泛型本身在运行时不被保留,因此在传递泛型类时,接收端可能无法直接推断出T的具体类型。你可能需要在额外的字段中保存类型信息,或者在接收端显式指定T的类型。 此外,如果泛型类中包含非Parcelable类型的...
- 泛型是.NET框架引入的一种机制,它允许我们在定义类、接口、方法或委托时延迟指定类型,直到在实际使用时才确定。这带来了以下优势: - 类型安全:编译器可以在编译时检查类型一致性,避免了类型转换的错误。 -...
接下来,我们讨论如何在反射中获取泛型信息。在Java中,`java.lang.reflect` 包提供了对反射的支持。例如,我们可以使用 `Class<T>.getGenericSuperclass()` 或 `Class<T>.getGenericInterfaces()` 来获取类的父类或...
在编程领域,泛型类是一种能够适用于多种数据类型的类设计,它允许开发者创建可复用的代码,以提高效率并减少错误。在数据处理场景下,泛型类可以有效地处理SQL、Oracle、ODBC(开放式数据库连接)和OLEDB(对象链接...
泛型是Java编程语言中用于减少类型转换错误和增强代码安全性的机制,它允许在定义类、接口和方法时使用类型参数。通过这种方式,可以在编译时期捕获那些只有在运行时期才会暴露的类型错误,提高了代码的健壮性。 ...
在使用反射访问泛型类型时,通常只能获取到其原始类型(即没有泛型信息的类型)。 ### 七、泛型与集合框架 Java集合框架广泛使用了泛型,例如`List<T>`、`Set<T>`和`Map, V>`。它们为存储和操作对象提供了类型安全...