Java泛型T的应用 获取T类型
2015-10-07 19:19
417 查看
Java中 获取 T 类型 需要注意T类型只能在继承类里获取 比如
此时
则会报异常
异常信息为
Class无法强转为ParameterizedType
是因为泛型只能在继承类中获取 加个继承类
此时
输出正常
此时
则会报异常
异常信息为
Class无法强转为ParameterizedType
虚拟机无法获取一个内部匿名类的T类型
Java机制 内部匿名类 传递的是当前类的类型 如下
StringCall的getT方法中 得到的类型值是
Main$1
没有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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统