java获取泛型参数(T.class)

public abstract class MyUtils<T> {
    MyUtils() throws Exception{
        Class<T> tClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        Log.i("xbh", tClass.getName());
    }

}

MyUtils<String> m = new MyUtils<String>(){}


通过创建匿名子类的方式(注意最后的括号)


但是如果不通过这个方式是不行的

比如先获取class,再强转成Type,再强转为 ParameterizedType,再获取泛型参数,是不行的(可能是另一种类型擦除机制)


而在最后不加{}也是不行的,因为我们是通过获取父类为我们保存的泛型(本类中会被擦除,父类中不会)



通过这种形式拿到了T的class以后,就可以干许多事了。你在封装的时候就无需传递class了,直接用泛型即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值