Java反射问题
通过java的反射,Field获得某一字段,然后可以调用Field的set()方法。与不用反射,直接调用字段的set方法有什么区别?反射的意义又是什么?...
通过java的反射,Field获得某一字段,然后可以调用Field的set()方法。与不用反射,直接调用字段的set方法有什么区别?反射的意义又是什么?
展开
3个回答
展开全部
一个标准的javabean类所有字段都是私有的.然后提供该字段的GET,SET.
这个是前提!
1.该字段的SET 方法 有可能加了拦截代码.有些值不赋进去.例如你做一个注册.要填性别的时候就只能填男女.其他不能填的就会用拦截代码拦截掉.
2.如果你用反射,就有方法直接访问那个字段,无论那字段是否私有.赋值的时候用的是JAVA反射包里Field类(java.lang.reflect.Field)里提供的SET方法其实就相当于直接赋值.不用经过其他拦截代码.即不用经类本身字段的SET方法
3.反射的意义体现了它能对项目的旷展性上.
例如你要实例化一个业务类.
普通:Demo d = new Demo();
------------------------------------
反射:Demo d= Class.forName(`类全名`);//可以直接通过类名就实例化一个对象,不用直接NEW
//而类名可以写在配置文件上面.用IO.读进来用就可以了.
//这样写得话,到时候要升级业务需求的时候,要换一个实现类,就不用其他改动源码,把新写好的业类类全名直接写在配置文件上就可以了
这个是前提!
1.该字段的SET 方法 有可能加了拦截代码.有些值不赋进去.例如你做一个注册.要填性别的时候就只能填男女.其他不能填的就会用拦截代码拦截掉.
2.如果你用反射,就有方法直接访问那个字段,无论那字段是否私有.赋值的时候用的是JAVA反射包里Field类(java.lang.reflect.Field)里提供的SET方法其实就相当于直接赋值.不用经过其他拦截代码.即不用经类本身字段的SET方法
3.反射的意义体现了它能对项目的旷展性上.
例如你要实例化一个业务类.
普通:Demo d = new Demo();
------------------------------------
反射:Demo d= Class.forName(`类全名`);//可以直接通过类名就实例化一个对象,不用直接NEW
//而类名可以写在配置文件上面.用IO.读进来用就可以了.
//这样写得话,到时候要升级业务需求的时候,要换一个实现类,就不用其他改动源码,把新写好的业类类全名直接写在配置文件上就可以了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询