java反射机制 反射机制? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 反射其实就是程序能够自检查自身信息。就像程序会照镜子反光看自己。在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。这样可以写出很灵活的程序。比如要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy,就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,再判断属性名是否相同即可。当然应用还有很多。反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。hibernate的延迟载入,spring的AOP都是这么实现的反射给Java带来了一些动态性。不过虽然很好,但毕竟还是有一定局限性的。另外ASM,cglib使用还是不放便。因此一些纯动态语言现在是一个重要发展趋势,比如ruby,python等,程序很容易动态生成。 通过反射可以根据类名和方法名动态地去调用相应的类和方法下面给个demoimport java.lang.reflect.Method;public class Test{ public static void main(String [] args){ try{ //实例化类 People obj=(People)Class.forName("People").newInstance(); Method method=null; //调用setName(String name)方法 method=obj.getClass().getMethod("setName",new Class[]{String.class}); method.invoke(obj,new Object[]{"princess"}); //调用getName()方法 method=obj.getClass().getMethod("getName"); String result=(String)method.invoke(obj); System.out.println("result is : "+result); }catch(Exception e){ } System.out.println("...ok..."); } }class People { private String name; public People(){ name="no name"; } public People(String name){ this.name=name; } //--get set methods-- public void setName(String name){ this.name=name; } public String getName(){ return this.name; } } 如何把InputStream放到byte[] bytes里面? jar包运行问题 熟悉jpcap的同仁请进!关于应用层数据byte[] data的处理问题,急! 用户自定义异常的一点疑问 跪求!关于jsp迭代的问题? 关于ArrayList的问题~大哥们帮帮忙~ java对Oracle的blob字段怎么处理???????? 如果将Java编译好的类文件打包成一个可执行文件啊? 求中文版的java1.4.1的新特性文档。一部分也可以。 如何从word文件中读取数据? java一个程序片段找错(高手们帮忙看看) 又想大侠请教关于抽象类和接口的问题~~~~
这样可以写出很灵活的程序。
比如要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy,
就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,
再判断属性名是否相同即可。当然应用还有很多。反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。
hibernate的延迟载入,spring的AOP都是这么实现的反射给Java带来了一些动态性。不过虽然很好,但毕竟还是有一定局限性的。另外ASM,cglib使用还是不放便。因此一些纯动态语言现在是一个重要发展趋势,比如ruby,python等,程序很容易动态生成。
下面给个demoimport java.lang.reflect.Method;public class Test{
public static void main(String [] args){
try{
//实例化类
People obj=(People)Class.forName("People").newInstance();
Method method=null;
//调用setName(String name)方法
method=obj.getClass().getMethod("setName",new Class[]{String.class});
method.invoke(obj,new Object[]{"princess"});
//调用getName()方法
method=obj.getClass().getMethod("getName");
String result=(String)method.invoke(obj);
System.out.println("result is : "+result);
}catch(Exception e){
}
System.out.println("...ok...");
}
}
class People {
private String name;
public People(){
name="no name";
}
public People(String name){
this.name=name;
}
//--get set methods--
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}