`
379548695
  • 浏览: 155123 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

运行时获取泛型T

    博客分类:
  • java
 
阅读更多

在编译期间T被搞成Object,类型丢失,所以是不能直接取到的.但有时可以变通地取到,比如:  

public class GenericType<T> { 
    protected GenericType() { 
        Type superclass = getClass().getGenericSuperclass(); 
        if (!(superclass instanceof ParameterizedType)) { 
            throw new RuntimeException("Missing type parameter."); 
        } 
        ParameterizedType parameterized = (ParameterizedType) superclass; 
        
        Class<T> messageType = parameterized.getActualTypeArguments()[0]; 
    } 

一般人俺不告诉他

 

 

public <T> Object executeQuery(MybatisCallBack<T> callback){ 
Class<MybatisCallBack> clazz=callback.getClass();
//下面就是用楼上方式取这个class的泛型了
Type superclass = clazz.getGenericSuperclass();
        if (!(superclass instanceof ParameterizedType)) {
            throw new RuntimeException("Missing type parameter.");
        }
        ParameterizedType parameterized = (ParameterizedType) superclass;
        
        Class<T> messageType = parameterized.getActualTypeArguments()[0];

}
 
分享到:
评论

相关推荐

    Java 获取泛型的类型实例详解

    在 Java 中,泛型的类型信息是被擦除的,这意味着在运行时,我们无法直接获取泛型的类型实例,例如,我们不能使用 `List&lt;User&gt;.class` 来获取 `List&lt;User&gt;` 的类型实例,这是因为 Java 语言在编译时擦除了泛型的类型...

    654.652.JAVA基础教程_反射-获取运行时类的父类及父类的泛型(654).rar

    然而,由于类型擦除,运行时无法直接获取泛型类型参数。但是,我们可以通过检查方法或字段的签名来间接获取这些信息。 例如,假设我们有一个如下父类: ```java public class ParentClass&lt;T&gt; { private List&lt;T&gt; ...

    C#重要知识之——泛型列表List例子

    1. 性能优势:由于类型安全和运行时无需装箱/拆箱,`List&lt;T&gt;`比非泛型的`ArrayList`有更好的性能。 2. 避免频繁扩容:在知道大概元素数量的情况下,可以预设容量以减少扩容次数,提高效率。 3. 避免大量插入和删除:...

    反射与泛型

    在Java中,泛型信息在编译后会被擦除,因此无法直接从运行时的Class对象获取泛型参数。但是,我们可以通过类的Type接口或者ParameterizedType接口来获取泛型信息。例如,如果我们有一个子类继承自DAO&lt;T&gt;,我们可以...

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

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

    java 泛型类的类型识别示例

    4. **利用`Class&lt;T&gt;`作为泛型约束**:有时候,我们可以在泛型类中使用`Class&lt;T&gt;`作为参数或字段,这样可以在运行时获取类型信息。例如: ```java public class MyClass&lt;T&gt; { private final Class&lt;T&gt; clazz; ...

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

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

    Java泛型_Java中的泛型结构_

    - 如果需要在运行时获取泛型信息,可以使用 `getGenericSuperclass()` 或 `getGenericInterfaces()` 等方法,但通常需谨慎处理。 总的来说,Java泛型为开发者提供了更高级别的抽象,提高了代码的清晰度、类型安全...

    关于java基础的泛型的练习

    - 如果需要,可以在运行时通过强制类型转换获取原始类型,但这样会丢失泛型带来的类型安全性。 8. 泛型和实例化: - 泛型类的实例化必须提供实际类型参数,如`MyList&lt;String&gt; list = new MyList();` - 对于无参...

    java泛型指南 经典

    使用 `Class` 字面量可以在运行时获取类型的元数据信息。这对于实现泛型方法时非常有用,特别是在需要确定某个类型的实例是否符合某种类型条件时: ```java public static &lt;T&gt; boolean isInstanceOf(Class&lt;T&gt; clazz,...

    java泛型技术之发展

    - **类型擦除**:泛型信息在运行时不可用,无法在运行时获取泛型类型。 - **不能实例化类型参数**:如 `new T()` 是不允许的。 - **原始类型与泛型**:原始类型(如int、double)不能直接用作类型参数,但可以...

    Java中泛型的各种使用

    因此,泛型主要用于编译时的类型检查,无法在运行时获取泛型信息。 7. 容器类与泛型 Java集合框架中的许多类都使用了泛型,如`ArrayList&lt;T&gt;`、`HashMap, V&gt;`等。泛型使得我们可以指定容器存储的数据类型,从而避免...

    java 泛型入门 实例

    - 反射在处理泛型时有一定的限制,因为泛型信息在运行时已被擦除。可以通过类型参数的边界或使用`Class&lt;?&gt;`来获取部分信息。 10. **实际应用** - 在实际开发中,泛型广泛用于设计通用的数据结构和算法,如缓存、...

    VT泛型集合字典根据预设键获取值

    反射是.NET框架中的一个重要功能,它允许运行时程序获取有关自身的信息,包括类、方法、字段等的元数据,并能动态地调用方法或访问字段。在代码中,`typeof(T).GetProperties()` 使用反射获取类型 `T` 的所有属性...

    XML 泛型 控件 的C#编程示例

    这样做的好处是,可以在运行时保留类型信息,从而避免了不必要的类型转换,并提高了性能。在C#中,我们使用尖括号`&lt;&gt;`来定义泛型,如`List&lt;T&gt;`,其中`T`是类型参数,代表一个未指定的具体类型。 在控件编程中,我们...

    泛型编程小实例(以List为例)

    这限制了在运行时对泛型的某些操作,比如创建具有特定类型参数的泛型对象。 8. **泛型与多态** 泛型可以与多态结合,允许子类继承父类的泛型方法,并自定义类型参数。这增强了代码的灵活性和扩展性。 通过上述的...

    java 泛型

    10. **反射和泛型**:虽然泛型信息在运行时被擦除,但通过反射可以获取到泛型的原始类型信息,这对于编写一些高级的库和工具非常有用。 通过理解和熟练运用这些知识点,开发者可以编写出更加健壮、可读性更强的Java...

    Java基础篇:泛型.pdf

    泛型的核心思想是确保类型的正确性和安全性,避免在运行时出现类型转换异常(ClassCastException)。Java泛型的一个重要应用是在集合框架中。在JDK 1.5之前,Java集合类框架使用Object作为元素类型,这意味着集合...

Global site tag (gtag.js) - Google Analytics