您的位置:首页 > 编程语言 > Java开发

Java泛型T的应用 获取T类型

2015-10-07 19:19 417 查看
Java中 获取 T 类型 需要注意T类型只能在继承类里获取 比如

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Call<T> {
private Object obj;

public Call(Object obj) {
this.obj = obj;
}

public T getT() {
System.out.println(getTClass().getName());
if (obj.getClass().getName().equals(getTClass().getName())) {
return ((T) obj);
}
return null;
}

private Class<T> getTClass() {
Type t = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) t).getActualTypeArguments();
Class<T> cls = (Class<T>) params[0];

return cls;
}

}


此时

String str = new Call(“Hello”).getT();
print(str);


则会报异常

异常信息为

Class无法强转为ParameterizedType

是因为泛型只能在继承类中获取 加个继承类

public class StringCall extends Call {

public StringCall(Object obj) {
super(obj);
}

}


此时

String str = new StringCall(“Hello”).getT();
print(str);


输出正常

Hello


此时

String str = new StringCall(“Hello”){}.getT();
print(str);


则会报异常

异常信息为

Class无法强转为ParameterizedType

虚拟机无法获取一个内部匿名类的T类型

Java机制 内部匿名类 传递的是当前类的类型 如下

public class Main {
public static void main(String[] args) {
String str = new StringCall(“Hello”){}.getT(); print(str);
}
}


StringCall的getT方法中 得到的类型值是

Main$1

没有T类型

以上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 泛型 继承 内部类