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对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)