Java中,class<?>对象如何作为类来使用??

看了题目可能不明白,在这里解释一下。例如这个我要弄一个函数func,这个函数有一个Class<?>类的参数:voidfunc(Class<?>cla){}而现在我想在函数... 看了题目可能不明白,在这里解释一下。

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

也就是说,平时我们创建对象(例如String类的)写成这样:
String aa;
而如果只能用String.class不能用String的话,要怎么创建?
展开
 我来答
主宰比赛Eddie
2014-08-28 · TA获得超过1868个赞
知道小有建树答主
回答量:574
采纳率:0%
帮助的人:120万
展开全部

利用Java的反射原理,通过Class 对象生成对应类的 对象。这句话有点绕,我给你举几个例子

下面的代码是伪代码,不可以直接拿去用,但是思想是对的

代码1

class A{
    A(){ /五惨构造器
    }
    
    String name; //A的一个属性
    int id;//A的一个属性
    A(String name){ //含有一个String类型的构造器
    this.name = name;
    id = 0;
    }
    
    
    A(int id,String name){
    this.id = id;
    this.name = name;
    }
}

这段代码含有3个构造器,一个是无参,2个是有参,并且参数数量和类型均不同,现在看下怎么用Class 通过反射创建对应的对象

A functionA() throws Exception{ //注意必须抛出或捕获异常 
 Class<?> aClaz = Class.forName("A") ;//获取A的Class对象,注意这里必须是包名+类名
 //或你可以用下面的方法创建class对象
 //Class<?> aClaz = A.class; //注意Class的大小写,这个方法优于上面的方法
 
 创建A的一个实例,通过五惨构造器
 A a = (A)aClaz.newInstance(); //newInstance 是Class的方法,
 //他是利用Java反射生成一个对象,但是类型是Object的,所以我们要加上强制转换
 return a; 
}

A functionA(String name)throws Exception{
    //遇到有参构造器就不能直接newInstance了,我们必须获取Constructor对象
    Class<?> aClaz = Class.forName("A") ;
    
    //获取构造器,参数类型是String的Class类型
    Constructor con = aClaz.getConstructor(String.class);
    
    //利用构造器生成对象,并传入参数name
    A a = (A)con.newInstance(name)
    
    return a;
}

第三个例子我就不写了,和第二个是一模一样的
因为获取构造器的 getConstructor()方法的参数实际是Class....claz。表示他是一个长度可变的数组,所以你里面放多少个参数都可以,你只要按照你定义的构造器一次放入准确的参数类型即可,然后调用constructor的newInstance时再把参数传递进去就OK了,基本上很多步骤都有异常产生,所以你必须用try块来处理,或直接抛出,交给下一个环节处理。
从入门到放弃0
2018-02-07
知道答主
回答量:2
采纳率:0%
帮助的人:1772
展开全部
亲,你问题解决了么? 可以分享一下么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
山水如墨染江南
2018-02-05
知道答主
回答量:8
采纳率:0%
帮助的人:4.3万
展开全部
String aa = (String)Class<?>.newInstance();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式