在编程Java中,class<?>对象如何作为类来使用?该怎么操作?

看了题目可能不明白,在这里解释一下。
例如这个我要弄一个函数func,这个函数有一个Class<?>类的参数:
void func(Class<?> cla){}
而现在我想在函数里面创建一个类型为cla所指向的类的对象
例如,如果传入的cla参数值为String.class,那么对象应为
void func(Class<?> cla){
String aa;
}
可是如果传入的参数是其他的,那么这个对象就得是其他类型的对象。
可是这要怎么写呢?
写成 cla aa; ?(显然是不行的)

也就是说,平时我们创建对象(例如String类的)写成这样:
String aa;
而如果只能用String.class不能用String的话,要怎么创建?

白衣染霜花
浏览 245回答 2
2回答

ABOUTYOU

String aa = (String)Class<?>.newInstance();

拉风的咖菲猫

利用Java的反射原理,通过Class 对象生成对应类的 对象。这句话有点绕,我给你举几个例子下面的代码是伪代码,不可以直接拿去用,但是思想是对的代码1class&nbsp;A{&nbsp;&nbsp;&nbsp;&nbsp;A(){&nbsp;/五惨构造器&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name;&nbsp;//A的一个属性&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;id;//A的一个属性&nbsp;&nbsp;&nbsp;&nbsp;A(String&nbsp;name){&nbsp;//含有一个String类型的构造器&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A(int&nbsp;id,String&nbsp;name){&nbsp;&nbsp;&nbsp;&nbsp;this.id&nbsp;=&nbsp;id;&nbsp;&nbsp;&nbsp;&nbsp;this.name&nbsp;=&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;}}这段代码含有3个构造器,一个是无参,2个是有参,并且参数数量和类型均不同,现在看下怎么用Class 通过反射创建对应的对象A&nbsp;functionA()&nbsp;throws&nbsp;Exception{&nbsp;//注意必须抛出或捕获异常&nbsp;&nbsp;Class<?>&nbsp;aClaz&nbsp;=&nbsp;Class.forName("A")&nbsp;;//获取A的Class对象,注意这里必须是包名+类名&nbsp;//或你可以用下面的方法创建class对象&nbsp;//Class<?>&nbsp;aClaz&nbsp;=&nbsp;A.class;&nbsp;//注意Class的大小写,这个方法优于上面的方法&nbsp;&nbsp;&nbsp;创建A的一个实例,通过五惨构造器&nbsp;A&nbsp;a&nbsp;=&nbsp;(A)aClaz.newInstance();&nbsp;//newInstance&nbsp;是Class的方法,&nbsp;//他是利用Java反射生成一个对象,但是类型是Object的,所以我们要加上强制转换&nbsp;return&nbsp;a;&nbsp;}&nbsp;A&nbsp;functionA(String&nbsp;name)throws&nbsp;Exception{&nbsp;&nbsp;&nbsp;&nbsp;//遇到有参构造器就不能直接newInstance了,我们必须获取Constructor对象&nbsp;&nbsp;&nbsp;&nbsp;Class<?>&nbsp;aClaz&nbsp;=&nbsp;Class.forName("A")&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取构造器,参数类型是String的Class类型&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;con&nbsp;=&nbsp;aClaz.getConstructor(String.class);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//利用构造器生成对象,并传入参数name&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;a&nbsp;=&nbsp;(A)con.newInstance(name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a;}&nbsp;第三个例子我就不写了,和第二个是一模一样的因为获取构造器的&nbsp;getConstructor()方法的参数实际是Class....claz。表示他是一个长度可变的数组,所以你里面放多少个参数都可以,你只要按照你定义的构造器一次放入准确的参数类型即可,然后调用constructor的newInstance时再把参数传递进去就OK了,基本上很多步骤都有异常产生,所以你必须用try块来处理,或直接抛出,交给下一个环节处理。
打开App,查看更多内容
随时随地看视频慕课网APP