在发帖之前,一直在考虑。该不该发。查了查我的问题。也没有找到一个解决方案。所以,还是来发帖了。就发在新手帖吧。也许真的只是一个新手的问题。
先描述一下问题。有这个一个类:
public class Test<T>
{
}
要得到T的class。
如果看到这,请继续看下文,千万不要给出一句:
[color=red]
Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
[/color]
的答复。因为,我已经试过了。
一直没有仔细研究泛型这个东西。所以直接上网查了。
基本上找到这样一个方法:
Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
于是,依葫芦画瓢:
public class Test<T>
{
Class<T> clazz;
public Test()
{
clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public static void main(String[] args)
{
Test<Integer> t = new Test<Integer>();
}
}
执行后抛出异常如下:
Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at Test.<init>(Test.java:9)
at Test.main(Test.java:14)
查找原因。发现,java中的泛型采用擦拭法。无法得到自己本身的泛型。而调用
getGenericSuperclass()方法得到的是
父类的泛型。
所以,再次修改代码:
class Father<T>
{
}
public class Test<T> extends Father<T>
{
Class<T> clazz;
public Test()
{
clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
//((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
}
public static void main(String[] args)
{
Test<Integer> t = new Test<Integer>();
}
}
运行后出现如下异常:
Exception in thread "main" java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class
at Test.<init>(Test.java:14)
at Test.main(Test.java:20)
这下郁闷了。按道理说,这个是没有问题的。
于是我再次修改代码。把15行的注释打开,把14行注释掉。于是,代码如下:
class Father<T>
{
}
public class Test<T> extends Father<T>
{
Class<T> clazz;
public Test()
{
//clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
}
public static void main(String[] args)
{
Test<Integer> t = new Test<Integer>();
}
}
这次,没有抱任何异常。那么也就是说:getActualTypeArguments()[0] 无法强制转化成为Class<T>类型。乖乖,我本来就要得到这个类型。现在就差一步之遥了。
请问,我该如何得到了?
分享到:
相关推荐
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
关于Java的泛型,这是Java 5.0版本引入的一项重大特性,旨在提供类型安全的集合操作,并增强代码的重用性和灵活性。泛型允许程序员在设计类或接口时使用类型参数,使得类或接口可以处理任何数据类型,而不必为每种...
本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时...
Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全...在进行"关于Java基础的泛型的练习"时,可以尝试编写不同的泛型类、泛型方法,体验泛型带来的便利,并理解其背后的类型系统和类型擦除机制。
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/...
提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...
如果你真能只用一个dao解决,那么祝贺你,你得到了一个虚拟数据层(高度抽象的数据接口)。这是一个比dao更高级的存在。 欢迎大家指正 -_- 虚心求教 代码层次: bean-->dao-->service-->action 技术概述:1....
public class MyFirstGeneric<T> { private T item; public MyFirstGeneric(T item) { this.item = item; } public T getItem() { return item; } public void setItem(T item) { this.item = item; } ...
Java泛型和Class类用法示例 Java泛型和Class类用法示例主要介绍了Java泛型和Class类用法,结合实例形式分析了java使用泛型限制class类避免强制类型转换相关操作技巧。本文将从以下几个方面详细讲解Java泛型和Class...
【Java 泛型详解】 Java 泛型是自Java SE 1.5版本引入的一种强大的编程工具,它允许在类、接口和方法中使用类型参数,从而实现了参数化类型。泛型的主要目标是提高代码的安全性和可重用性,同时减少类型转换的繁琐...
#### 九、更多关于通配符 (*) ##### 9.1 通配符匹配 (wildcard capture) Java 编译器会在某些情况下自动推断出通配符的类型。这种自动推断称为通配符捕获 (wildcard capture)。 #### 十、泛型化老代码 将现有的...
在Java编程语言中,泛型是一种强大的特性,它允许我们在编写代码时指定类型参数,从而提高了代码的灵活性、安全性和可重用性。本篇我们将深入探讨“泛型实现小例”这一主题,通过实际的例子来理解泛型的使用。 首先...
在编程世界中,C#和Java都是广泛应用的高级编程语言,它们都支持泛型这一强大的特性,以提高代码的类型安全性和重用性。本文将深入探讨C#和Java在泛型实现上的异同,帮助开发者更好地理解和利用这两种语言的泛型功能...
泛型学习和泛型接口和泛型经典示例
- 定义泛型类时,类型参数写在尖括号内,如 `class TestGen, V>`。 - 实例化泛型对象时,需要指定类型参数的具体类型,如 `TestGen, String> t = new TestGen, String>()`。 - `extends` 关键字在泛型中的作用是...
SSH泛型代码实例是关于Java编程中的一种常见技术——Spring、Struts和Hibernate(SSH)框架结合使用泛型的应用示例。泛型是Java SE 5.0引入的一个重要特性,它允许在编译时检查类型安全,并且所有的强制转换都是自动...
了解这些概念后,我们可以看到`GenericClass.java`文件可能包含了关于如何创建和使用继承泛型类的实际代码示例。而`Java.jpg`可能是用于辅助解释的图像,比如类结构图或代码截图。在实际学习过程中,结合代码和图像...
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照