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

来源:互联网 发布:数据库基础面试题 编辑:程序博客网 时间:2024/05/01 08:04

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类型

以上

0 0
原创粉丝点击