- 浏览: 238946 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
g_man1990:
g_man1990 写道在同一个文件夹下,jar包是按顺序从上 ...
tomcat中class和jar的加载顺序 -
g_man1990:
在同一个文件夹下,jar包是按顺序从上到下依次加载,按什么顺序 ...
tomcat中class和jar的加载顺序 -
上凌九霄:
谢谢
tomcat中class和jar的加载顺序 -
waitgod:
好文,值得收藏!!
HotSpot是什么? -
xiaomogui:
sd6733531 写道楼主,我想问点问题》
1.mixed, ...
HotSpot是什么?
package com.gui.test.reflection; import java.lang.reflect.Method; import java.util.Hashtable; import java.util.regex.Pattern; /** * * @desc 通过反射来动态调用get 和 set 方法 * @date 2010-10-14 * @Version 1.0 */ public class SetMethodReflect { private Class cls; /** * 传过来的对象 */ private Object obj; /** * 存放get方法 */ private Hashtable<String, Method> getMethods = null; /** * 存放set方法 */ private Hashtable<String, Method> setMethods = null; /** * 定义构造方法 -- 一般来说是个pojo * * @param o 目标对象 */ public SetMethodReflect(Object o) { obj = o; initMethods(); } /** * * @desc 初始化 */ public void initMethods() { getMethods = new Hashtable<String, Method>(); setMethods = new Hashtable<String, Method>(); cls = obj.getClass(); Method[] methods = cls.getMethods(); // 定义正则表达式,从方法中过滤出getter / setter 函数. String gs = "get(\\w+)"; Pattern getM = Pattern.compile(gs); String ss = "set(\\w+)"; Pattern setM = Pattern.compile(ss); // 把方法中的"set" 或者 "get" 去掉 String rapl = "$1"; String param; for (int i = 0; i < methods.length; ++i) { Method m = methods[i]; String methodName = m.getName(); if (Pattern.matches(gs, methodName)) { param = getM.matcher(methodName).replaceAll(rapl).toLowerCase(); getMethods.put(param, m); } else if (Pattern.matches(ss, methodName)) { param = setM.matcher(methodName).replaceAll(rapl).toLowerCase(); setMethods.put(param, m); } else { // System.out.println(methodName + " 不是getter,setter方法!"); } } } /** * * @desc 调用set方法 */ public boolean setMethodValue(String property, boolean value) { Method m = setMethods.get(property.toLowerCase()); if (m != null) { try { // 调用目标类的setter函数 m.invoke(obj, value); return true; } catch (Exception ex) { System.out.println("invoke getter on " + property + " error: " + ex.toString()); return false; } } return false; } /** * * @desc 调用set方法 */ public boolean setMethodValue(String property, String value) { Method m = setMethods.get(property.toLowerCase()); if (m != null) { try { /** * 调用obj类的setter函数 */ m.invoke(obj, value); return true; } catch (Exception ex) { System.out.println("invoke getter on " + property + " error: " + ex.toString()); return false; } } return false; } // 测试方法 public static void main(String args[]) { Test ah = new Test(); SetMethodReflect smr = new SetMethodReflect(ah); smr.setMethodValue("a", false); smr.setMethodValue("b", true); smr.setMethodValue("c", true); System.out.println(ah.isA()); System.out.println(ah.isB()); System.out.println(ah.isC()); } } // 一个model class Test { boolean a; boolean b; boolean c; public boolean isA() { return a; } public void setA(boolean a) { this.a = a; } public boolean isB() { return b; } public void setB(boolean b) { this.b = b; } public boolean isC() { return c; } public void setC(boolean c) { this.c = c; } }
上面的代码很早以前看过,忘记那个网站了。
应用场景是把一个属性存储到数据库中,当调用该字段的setter和getter方法时,可用此方法。
发表评论
-
java 重载和重写
2013-02-06 13:10 0Java 方法重载 (OverLoad)与方法覆盖(Over ... -
java-线程同步
2013-02-06 13:10 0原子性:哪些指令必须是不可分割的。在Java内存模型中,这些规 ... -
java序列化
2013-02-06 13:08 01, 比较常见的做法有两种:一是把对象包装成JSON字符串传 ... -
java动态内容绑定
2013-02-06 13:08 01, CDN 中动态内容是不 ... -
java-静态绑定
2013-02-06 13:07 0private、static、final修饰的方法是静态绑定的 ... -
java内存管理工具
2013-02-06 13:04 01.jps .:与unix上 ... -
ConcurrentHashMap
2013-02-06 13:01 01, HashTable容器在竞争激烈的并发环境下表现出效率 ... -
java队列
2013-01-21 17:25 01. 新的java.util.concurrent包可用的具 ... -
java反射和动态代理
2012-03-02 00:19 01. 运行时类型信息(Runtime Type Infomat ... -
java io和nio
2012-03-02 00:19 01 。关于字节流(OutputStream,InputStre ... -
java规范( The Java Language Specification, Third Edition)
2011-02-05 13:25 0http://java.sun.com/docs/boo ... -
IOException while loading persisted sessions: java.io.EOFException
2010-12-30 00:34 1783ERROR [main] session.ManagerBas ... -
java基础之字符串反转
2010-12-14 02:06 0public class Test { /** ... -
java源码之String
2010-12-07 23:15 19101.String源码中队String类的描述: ... -
java基础之变量
2010-12-07 22:39 9791. Class文件加载流程 ... -
java基础之内存分配
2010-11-16 00:25 11591. 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈 ... -
java基础之堆栈
2010-11-16 00:24 11461. JVM在它的生存周期中有一个明确的任务, ... -
Think in java4笔记 --- 容器之集合(Map)
2010-11-16 00:22 11594. Map接口 Map接口不是Collec ... -
Think in java4笔记 --- 容器之集合(Collection,List,Set)
2010-11-16 00:20 1150... -
Think in java4笔记 --- 容器之集合(历史)
2010-11-16 00:19 962当我们编写 ...
相关推荐
java 的eclipse或idea等 定义变量时 直接引入lombok.jar包 在类外部 引入@AllArgsConstructor @NoArgsConstructor @Data 简便方法引入getter/setter/tostring等方法
与setter和getter方法有关的案例
【IT十八掌徐培成】Java基础第25天-03.递归获取所有超类-内省获取所有属性-getter-setter.zip
Java开发学习(六)----DI依赖注入之setter及构造器注入解析.doc
eclipse中setter/getter方法自动添加属性注释,详情参考http://blog.csdn.net/yuxinabc/article/details/49179113
JavaScript中setter和getter方法介绍_.docx
eclipse中的setter与getter注释,实体的编写,在代码编写工程中能清晰了解此意
jfinal model自动生成工具,自带setter与getter
(OC)Setter,Getter修改私有属性
eclipse修改setter/getter配置,实现自动生成方法时自动抽取属性上的注释:https://blog.csdn.net/yyaijunji/article/details/84639609
主要介绍了JavaScript中setter和getter方法介绍的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
java普通类编译成json但只是当前类的有getter、setter方法的版本
自动生成带注释的getter和setter方法(注释)插件
你可以看到这个类对属性的存取方法(getter and setter method)使用了标准JavaBean命名约定,同时把类属性(field)的访问级别设成私有的(private)。这是推荐的设计,但并不是必须的。Hibernate也可以直接访问...
OC-模型的Setter,Getter的由来,@property的由来
NULL 博文链接:https://cjk87927.iteye.com/blog/1149855
VueSetter 通过getter和setter进行数据绑定的插件安装npm install --save vue-setter用法输入绑定<input type="text" v-setter.name="user" :value="user.getName()">将在输入时自动调用user.setName 。捆绑器...
已经拥有一年经验的你真的了解get set方法吗?也许不!以前我以为都有上架项目,这都是太基础的东西,但今天我重新回头看了以前做的笔记,真的是书读百遍,其义自见。
FastCoding是一个对Xcode所扩展的插件,主要是根据java的开发工具 eclipse 快速生成属性的getter ,setter 方法有感而发.出于兴趣开发本插件,目前主要功能是根据.h,.m文件声明的属性,自动生成get,set,lazy实例化方法