黑马程序员技术交流社区

标题: 【黑马云青年 反射在实际开发中用的多吗?】 [打印本页]

作者: simonqian    时间: 2013-5-17 09:55
标题: 【黑马云青年 反射在实际开发中用的多吗?】
比如下面一段代码

public class GenericTest{

     public static void main(String[] args)
        {
                 Method applyMethod = GenericTest.class.getMethod("applyVector",Vector.class);
                 Type[] types = applyMethod.getGenericParameterTypes();
        }



         public static void applyVector(Vector<Date> v1){}
}
上面的代码是通过反射获取方法的参数的类型,这个在实际开发中多吗?多的话,举例说明?
作者: 尹丽峰    时间: 2013-5-17 10:06
本帖最后由 尹丽峰 于 2013-5-17 10:08 编辑

【黑马云青年为您解答】
Java反射机制主要提供以下功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法。
只要涉及到框架开发反射用的频率很高
下面经典案例
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Admin {
public Admin(){

}
private String id = "";

public String getId() {
System.out.print(id);
return id;
}
public void setId(String id) {
this.id = id;
}

public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException,
SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {

String str="com.spring.event.Admin";
Class c=Class.forName(str);
Object obj=c.newInstance();

//        这里是里设置属性的值
Method m = c.getMethod("setId",new Class[]{Class.forName("java.lang.String")});
m.invoke(obj,new Object[]{"penghao122"});

//        这里是里获取属性的值
    m = c.getMethod("getId",new Class[]{});
m.invoke(obj,new Object []{});

}

}

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Admin {
public Admin(){

}
private String id = "";

public String getId() {
System.out.print(id);
return id;
}
public void setId(String id) {
this.id = id;
}

public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException,
SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {

String str="com.spring.event.Admin";
Class c=Class.forName(str);
Object obj=c.newInstance();

//        这里是里设置属性的值
Method m = c.getMethod("setId",new Class[]{Class.forName("java.lang.String")});
m.invoke(obj,new Object[]{"penghao122"});

//        这里是里获取属性的值
    m = c.getMethod("getId",new Class[]{});
m.invoke(obj,new Object []{});

}

}


作者: 曹睿翔    时间: 2013-5-19 08:04
如果问题已解决请再次编辑,改为以解决,方便大家看帖,没有就继续追问




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2