`
grandboy
  • 浏览: 124877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

取得泛型T.class的方法

    博客分类:
  • JAVA
阅读更多
前几天写框架碰到T.class的问题,因为无法在一个类或者方法里得到T.class, 所以必须得靠一个参数把T.class传进去, 今天,想起这个问题,就搜了一下,在网上看到一篇文章(http://www.mscto.com/JavaScript/2009010958837.html),里面说可以得到类级别的T.class。 方法如下:
Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

Java中的泛型采用擦拭法。无法得到自己本身的泛型。而调用getGenericSuperclass()方法得到的是父类的泛型。不过一般也能解决问题。只要知道他的限制就行了,因势利导吧。

如果你想用一个Base类实现一些接口方法(只是实现方法,并没有实现全部方法,也不是实现接口),而且一个子类extends的这个Base类,由于你不会再在子类中实现同样的方法,所以Base类里的方法必须声明为public, 而且不是一般的Base类里可以是protected方法。

还有一个问题,如果你想使用CGLib来做代理的话,可能这种方法不行。因为CGLib是通过扩展和增强原来的类实现代理的,而这里的getClass()得到的很可能是CGLib生成的子类,这样就不能强制转换成ParameterizedType类型。大家在具体使用中注意这一点。

还需要得到方法里的T.Class,而且是静态方法,不知道能不能实现? 后来得到的答案是不能。 正如上面所讲的Java中的泛型采用擦拭法, 而且静态方法是可以被任何地方和其他任何方法调用的,根本就不会有Base类的“泛型T”,也就无法得到T.class。

以前都用JDK1.4, 最近公司才决定放弃1.4,这才开始研究泛型。







分享到:
评论
1 楼 zhangbenben 2011-07-04  
      

相关推荐

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

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

    java元数据——CLass类

    1. 通过 Class 的 forName(String name) 方法传入一个类的完整类路径,也可以获得Class 对象,但由于使用的是字符串,必须强制转换才可以获取泛型的Class&lt;T&gt;的Class对象,并且你应该考虑到这个方法可能抛出的 ...

    Java泛型定义与用法实例详解

    4. 泛型的类型参数不能是泛型类型自己,例如GenericClass&lt;T&gt;等。 泛型是Java语言中的一种重要机制,用于在编译期检查类型安全,避免在运行期引发ClassCastException。泛型的使用可以使得Java语言更加灵活和强大,但...

    Unity通用泛型单例设计模式(普通型和继承自MonoBehaviour)

    使用这两个泛型单例设计模式,我们可以直接继承它们来创建自己的单例类,并使用T.Instance来取得该类的唯一实例。 例如: ```csharp public class MyClass : Singleton { // ... } public class MyMonoBehaviour ...

    JAVA期末复习知识点整理

    1. Class类:获取类的信息,创建对象,调用方法。 2. 构造器反射:动态创建对象。 3. 方法和字段反射:动态调用方法,访问字段。 九、泛型 1. 泛型的定义和使用:限制类型参数,提高代码安全性。 2. 泛型通配符:...

    详解C# 泛型中的数据类型判定与转换

    在类型判定中,我们可以使用 is 关键字来判定类型,也可以使用 GetType() 方法来取得值的类型或泛型类型进行判定。例如: if (tempa is int) { add = (int)tempa + (int)tempb; } else if (tempa is float) { add...

    c#面试题&答案 (1)

    - 泛型约束,如where T : class或where T : struct。 4. **LINQ**: - 查询表达式(查询语法)和方法链(扩展方法)两种使用方式。 - Lambda表达式在LINQ中的应用,如Select、Where、GroupBy等操作。 5. **异步...

    .net面试题 全集

    2. 泛型:深入理解泛型的概念,包括泛型类、泛型接口、泛型方法等,以及协变和逆变的使用。 3. 异步编程:掌握异步编程模型,包括async/await关键字,以及Task和Task&lt;T&gt;的使用。 4. ADO.NET与数据库交互:学习如何...

    C#基础入门经典教程

    - 泛型列表(List&lt;T&gt;)和泛型字典(Dictionary&lt;TKey, TValue&gt;)是常见的泛型容器。 6. **IO与数据流**: - 文件I/O操作包括读写文件、追加、移动文件指针等。 - 数据流用于处理输入/输出,如StreamReader和...

    [原创]自己工作中常用的模板库,简化你的工作

    ★ 当把"智能指针/stl迭代器/C指针/前三者嵌套"都视为指针时,其内的最终值(非指针值)是一致的,在模板函数中,某些场景需要取得其最终的非指针值。 应用场景:转发模板函数,如 template&lt;typename T&gt; void ...

    C#基本概念教程

    泛型允许创建类型参数化的类、接口和方法,提高代码复用,减少类型转换,提高类型安全性。 八、LINQ(Language Integrated Query) LINQ是C#中集成的查询语言,简化了数据查询操作,支持数据库、XML和集合等多种...

    非常全的c#学习资料,都是PPT

    6. **泛型**:学习泛型容器类,如List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等,以及泛型接口和泛型方法的使用。 7. **匿名方法与Lambda表达式**:理解匿名函数和Lambda表达式的语法,以及它们在LINQ查询中的作用。 三、...

    C#基础教程C# C# C# C#

    4. **泛型**:C#的泛型允许在不指定具体类型的情况下编写代码,提高了代码的可重用性和效率,如泛型集合(List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等)。 5. **异常处理**:通过try-catch语句块来捕获和处理运行时可能...

    C#语言教程和经典案例

    public class GenericStack&lt;T&gt; { private List&lt;T&gt; items = new List&lt;T&gt;(); public void Push(T item) { items.Add(item); } public T Pop() { T item = items[items.Count - 1]; items.RemoveAt(items....

    广州C#面试题目集合

    - 泛型容器:如List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等,它们提供了强大的数据存储和操作功能。 5. 高级特性 - 枚举:用于定义一组相关的值,通常用于开关或状态表示。 - 析构函数:用于对象销毁时进行清理工作。 ...

    java笔试题大集合及答案(另附各大公司笔试题).rar

    - **Class类**:如何获取Class对象,创建实例,调用方法。 - **注解**:自定义注解和元注解的使用,注解处理器。 15. **JVM**: - **内存模型**:堆、栈、方法区、本地方法栈的理解。 - **垃圾收集**:GC的基本...

    c#语法全解!初学C#的朋友们的首选!

    - List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等集合类提供了动态数组和键值对的存储功能。 - 泛型允许在不指定具体类型的情况下创建集合,提高代码的可复用性。 9. **LINQ(Language Integrated Query)**: - LINQ是C#...

    c#入门宝典

    public class GenericStack&lt;T&gt; { private T[] elements; private int top; public void Push(T item) { elements[top++] = item; } public T Pop() { if (top == 0) throw new InvalidOperationException(...

    C#英文词典

    1. 类(Class):C#中的核心构造块,用于封装数据和方法。 2. 对象(Object):类的实例,具有特定的数据和行为。 3. 函数(Method):执行特定任务的代码块,也称为方法。 4. 变量(Variable):存储数据的容器。 5...

    电子学会青少年信息素养大赛智能算法试题

    - **示例**:`template&lt;typename T&gt; class Pair { T first, second; public: Pair(T f, T s) : first(f), second(s) {} };` ### 智能算法相关知识点 考虑到比赛的主题是“智能算法”,以下是一些可能与比赛相关的...

Global site tag (gtag.js) - Google Analytics