java中获取泛型的实际类型,请问如何做 (请不要简单的说要用反射机制哈,描述下具体如何实施)

java中获取泛型的实际类型,请问如何做 (请不要简单的说要用反射机制哈,描述下具体如何实施),第1张

public void showType(){

Systemoutprintln(TgetClass()getName());}

这个T是泛型,这直接用是不能的,它只能用于类声明(你的例子),类变量声明,方法声明和参数声明。

其实只用getClass()就够了

完善下你的类如下

class A<T>{

T tt;

A(T t){

thistt = t;

}

public void showType(){

Systemoutprintln(tgetClass()getName());

}

public static void main(String args[]){

A<B> a1 = new A<B>(new B());

a1showType(); // 这里打印出T(或者tt)的类型是B

A<C> a2 = new A<C>(new C());

a2showType(); // 这里打印出T(或者tt)的类型是C

}

}

Java的泛型就是创建一个用类型作为参数的类。就象我们写类的方法一样,方法是这样的method(String str1,String str2 ),方法中参数str1、str2的值是可变的。而泛型也是一样的,定义泛型 一般用 T 表示 public <T> List<T> method(T t){ 方法体} 。它的参数 就是 T 一个类型,你传什么类型的对象,T就是什么类型。

T将是 可变的类型。

Type genType = clazzgetGenericSuperclass();

Type [] params = ((ParameterizedType) genType)getActualTypeArguments();

return (Class) params[0];

泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类型。但注意public class BookManager<Book是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(FieldgetGenericType())等有函数返回ParameterizedType的时候才能成功反射,

你要么搞个构造函数把参数类型传进去才行

泛型的目的就是为了避免强制类型转换,所以直接取出来就是Object的类型了。

public class ClassTest {

public static void main(String[] args) {

List<String> listStr = new ArrayList<String>();

listStradd("AAA");

listStradd("BBB");

Systemoutprintln(listStrget(0));

}

}

你想要的应该是这个吧,只要取出来就是你定义类型的Object了,在这个例子中是String。如果你给它定义的是Integer类型的泛型的话,取出来就是Integer了。

以上就是关于java中获取泛型的实际类型,请问如何做 (请不要简单的说要用反射机制哈,描述下具体如何实施)全部的内容,包括:java中获取泛型的实际类型,请问如何做 (请不要简单的说要用反射机制哈,描述下具体如何实施)、java中 如何得到泛型参数的类型,并在另一个方法中使用、如何获得泛型的Class对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10215954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存