`
OpenMind
  • 浏览: 179490 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

泛型类里面获取到泛型的类型

    博客分类:
  • java
阅读更多
下面的代码可以让你在抽象的泛型类里面获取到泛型的类型
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里面看到它的用处。
分享到:
评论

相关推荐

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    例如,我们可以定义一个泛型接口`IGenericCollection&lt;T&gt;`,要求实现它的类必须提供添加、删除和获取元素的方法: ```csharp public interface IGenericCollection { void Add(T item); void Remove(T item); T ...

    java 泛型类的类型识别示例

    在示例文件`GenericRTTI.java`中,很可能是展示了一些如何在运行时识别泛型类类型的具体实现。同时,`Java.jpg`可能是对这个概念的一个图形化解释或者示例的截图。通过学习和理解这些示例,你可以更好地掌握Java泛型...

    Java如何获取泛型类型

    Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...

    泛型工具类

    `GenericUtil`类中定义的`getClassOfGenricTypeParam`方法是其关键所在,该方法有两个重载版本,分别用于获取泛型参数的具体类型。第一个版本仅接受一个类对象作为参数,第二个版本额外接受一个整型索引,用于指定要...

    java 继承非泛型类示例

    在Java编程语言中,继承是...总之,Java中的继承是非泛型类和泛型类共有的特性,允许子类获取并扩展父类的功能。在实际编程中,理解如何正确地继承和使用非泛型类是至关重要的,这有助于构建灵活且易于维护的代码结构。

    looly#hutool-site#泛型类型工具-TypeUtil1

    介绍获取方法的参数和返回值类型(包括Type和Class)获取泛型参数类型(包括对象的泛型参数或集合元素的泛型类型)方法首先我们定义一个类:public cla

    c#使用 和 继承 泛型类

    泛型类是泛型的一种应用,可以在多个不同的数据类型上工作,提供了更高的类型安全性和性能。本篇文章将深入探讨如何在C#中使用和继承泛型类。 首先,让我们理解什么是泛型类。泛型类是一种模板或蓝图,它定义了参数...

    Java泛型的用法及T.class的获取过程解析

    Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...

    泛型java的泛型知识,非常有用

    泛型允许我们在类、接口和方法中使用类型参数,这样在编译时期就能检查类型匹配,减少运行时类型转换异常。 1. **泛型的基本概念** - 泛型的本质是在类、接口或方法中使用类型参数,让它们能够处理多种数据类型。...

    java中获取泛型类的子类

    通过反射获得指定类的父类的泛型参数的实际类型

    实现泛型类集合 实现双向链表

    泛型类是含有类型参数的类,它可以在创建对象时指定具体的类型,从而在编译时期就能进行类型检查,避免了运行时的ClassCastException。在Java中,我们可以这样定义一个泛型类: ```java public class Generic...

    数据工厂泛型类源码

    数据工厂泛型类是软件开发中的一个重要概念,它结合了数据工厂模式和泛型编程的特点,为创建对象提供了一种灵活且类型安全的方式。在Java、C#等面向对象编程语言中,泛型类被广泛使用,以提高代码的可重用性和减少...

    泛型和泛型集合类用法

    上述代码定义了一个名为`ItemList&lt;T&gt;`的泛型类,它可以存储任何类型的对象,并提供了添加和获取对象的方法。这种自定义泛型类可以根据具体的业务需求灵活扩展功能。 通过以上分析,我们可以看出泛型和泛型集合类在...

    Android Intent传递泛型类

    注意,泛型本身在运行时不被保留,因此在传递泛型类时,接收端可能无法直接推断出T的具体类型。你可能需要在额外的字段中保存类型信息,或者在接收端显式指定T的类型。 此外,如果泛型类中包含非Parcelable类型的...

    C#常用泛型类型.rar

    - 泛型是.NET框架引入的一种机制,它允许我们在定义类、接口、方法或委托时延迟指定类型,直到在实际使用时才确定。这带来了以下优势: - 类型安全:编译器可以在编译时检查类型一致性,避免了类型转换的错误。 -...

    博客《反射(2):泛型相关周边信息获取》对应源码

    接下来,我们讨论如何在反射中获取泛型信息。在Java中,`java.lang.reflect` 包提供了对反射的支持。例如,我们可以使用 `Class&lt;T&gt;.getGenericSuperclass()` 或 `Class&lt;T&gt;.getGenericInterfaces()` 来获取类的父类或...

    数据工厂泛型类

    在编程领域,泛型类是一种能够适用于多种数据类型的类设计,它允许开发者创建可复用的代码,以提高效率并减少错误。在数据处理场景下,泛型类可以有效地处理SQL、Oracle、ODBC(开放式数据库连接)和OLEDB(对象链接...

    Java基础篇:泛型.pdf

    泛型是Java编程语言中用于减少类型转换错误和增强代码安全性的机制,它允许在定义类、接口和方法时使用类型参数。通过这种方式,可以在编译时期捕获那些只有在运行时期才会暴露的类型错误,提高了代码的健壮性。 ...

    泛型用在类和方法上的写法

    在使用反射访问泛型类型时,通常只能获取到其原始类型(即没有泛型信息的类型)。 ### 七、泛型与集合框架 Java集合框架广泛使用了泛型,例如`List&lt;T&gt;`、`Set&lt;T&gt;`和`Map, V&gt;`。它们为存储和操作对象提供了类型安全...

    Java泛型类型擦除后的补偿

    - 反射API在泛型类型擦除后仍然能获取到泛型信息,这主要通过泛型类的类型参数的实际类型参数化实例(TypeToken)来实现。 - 这使得在运行时可以进行一些泛型相关的操作,如创建参数化的类实例。 总结来说,Java...

Global site tag (gtag.js) - Google Analytics