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了,直接用泛型即可。
java获取泛型参数(T.class)
最新推荐文章于 2024-07-10 22:13:59 发布