请问大家一些问题,今天看到一个这样的代码:
后来我根据自己对java.lang.Class对象的了解,改写成这样,但是编译器提醒我要转换类型。
我产生了 几个问题:
- Class对象是一个集合吗? 为什么要用Class<User>这样的泛型约束?
- 为什么通过User.class获取的类型不需要转换成Class<User>,而其它两种则需要?
- 这个参数传入BeanListHandler一般起什么作用?他和new User() ,User.this有什么区别
- 对这个知识比较疑惑,大家有没有好的文章分享一下。一般有哪些比较常用的场景?
User.class可以在编译时就确定下来Class的泛型,而new User().getClass()实际上是运行时才能确定下来实际是什么泛型。举个例子:
由此可见,Object.getClass()方法返回的Class泛型是运行时才能确定的,所以返回的类型是Class<?>,顺带贴下jdk源码上的注释
Class对象当参数传入方法中,因为需要一个Class对象的实例来操作反射进行类的创建,还是直接看代码:
注意这里T和clazz不是同一个概念,一个是类型一个是实例。即如果不传Class<T>的实例的话,用T是完成不了对象的创建的。