黑马程序员技术交流社区
标题:
反射获取构造方法创建对象求解
[打印本页]
作者:
wodeairenw
时间:
2013-4-30 00:53
标题:
反射获取构造方法创建对象求解
本帖最后由 wodeairenw 于 2013-4-30 12:53 编辑
import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class StringTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class<Outer> out =Outer.class;
Constructor co =out.getConstructor(int.class);//这里为什么报错
//接收有int类型的参数啊,怎么会错
//如何获取无参数的构造方法?
Outer ot =(Outer) co.newInstance(4);
ot.function();
/*
//class获得方法
Method methodCharAt=out.getMethod("function");
methodCharAt.invoke(new Outer());
//class获得成员
//System.out.println(out.getField("x"));
//内省
String propertyName= "x";//设置属性名
//下面是内省的重要对象PropertyDescriptor
PropertyDescriptor pd = new PropertyDescriptor(propertyName,out);
//Method getReadMethod() 获得应该用于读取属性值的方法。
Method methidGetX = pd.getReadMethod();
//Object invoke(Object obj, Object... args)
//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
Object retVal = methidGetX.invoke(new Outer() );
System.out.println(retVal);
*/
}
}
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
Outer()
{
};
Outer(int z)
{
this.z=z;
};
int x =3;
int z;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public void function()
{
final int y =9;
new AbsDemo()
{
void show()
{
System.out.println("x==="+x);
System.out.println("y==="+y);
}
}.show();
}
}
复制代码
无参构造方法如何获取,并创建对象。还有有参数的构造方法为什么报错。
作者:
符立波
时间:
2013-4-30 10:43
本帖最后由 符立波 于 2013-4-30 10:45 编辑
你上面的只能获取public声明的构造方法,要想获得,又不想加public,那就使用out.getDeclaredConstructor(int.class)
利用无参数的构造方法获取对象可以通过(Outer)out.newInstance()获得,或者(Outer)out.getDeclaredConstructor(null).newInstance(null)
作者:
wodeairenw
时间:
2013-4-30 12:53
符立波 发表于 2013-4-30 10:43
你上面的只能获取public声明的构造方法,要想获得,又不想加public,那就使用out.getDeclaredConstructor(i ...
非常感谢。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2