利用Java的反射原理,通过Class 对象生成对应类的 对象。这句话有点绕,我给你举几个例子
下面的代码是伪代码,不可以直接拿去用,但是思想是对的
代码1class 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块来处理,或直接抛出,交给下一个环节处理。

本文介绍如何使用Java反射机制,通过Class对象创建指定类的实例。包括无参构造器实例化及带参构造器实例化的具体步骤。

810

被折叠的 条评论
为什么被折叠?



