Java泛型T - Class<?>区别 - 知乎专栏

文章推薦指數: 80 %
投票人數:10人

3.获取Class类型对象的第三个方法非常简单。

如果T是一个Java类型,那么T.class就代表了匹配的类对象。

Class clazz = List.class;. 无障碍写文章登录/注册T是一种具体的类,例如String,List,Map......等等,这些都是属于具体的类,这个比较好理解Class是什么呢,Class也是一个类,但Class是存放上面String,List,Map......类信息的一个类,有点抽象,我们一步一步来看。

如何获取到Class类呢,有三种方式:1.调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。

例如:Listlist=null; Classclazz=list.getClass();2.使用Class类的中静态forName()方法获得与字符串对应的Class对象。

例如:Classclazz=Class.forName("com.lyang.demo.fanxing.People");3.获取Class类型对象的第三个方法非常简单。

如果T是一个Java类型,那么T.class就代表了匹配的类对象。

Classclazz=List.class;**那么问题来了?Class类是创建出来了,但是Class和Class>适用于什么时候呢???**使用Class和Class>多发生在反射场景下,先看看如果我们不使用泛型,反射创建一个类是什么样的。

Peoplepeople=(People)Class.forName("com.lyang.demo.fanxing.People").newInstance();看到了么,需要强转,如果反射的类型不是People类,就会报java.lang.ClassCastException错误。

使用Class泛型后,不用强转了publicclassTest{ publicstaticTcreateInstance(Classclazz)throwsIllegalAccessException,InstantiationException{ returnclazz.newInstance(); } publicstaticvoidmain(String[]args)throwsIllegalAccessException,InstantiationException{ Fruitfruit=createInstance(Fruit.class); Peoplepeople=createInstance(People.class); } } 那Class和Class>有什么区别呢?Class在实例化的时候,T要替换成具体类Class>它是个通配泛型,?可以代表任何类型,主要用于声明时的限制情况例如可以声明一个publicClass>clazz;但是你不能声明一个publicClassclazz;因为T需要指定类型所以当,不知道定声明什么类型的Class的时候可以定义一个Class>,Class>可以用于参数类型定义,方法返回值定义等。

发布于2021-06-0111:05ClassJava泛型(Generic)​赞同4​​添加评论​分享​喜欢​收藏​申请转载​



請為這篇文章評分?