<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    俊星的BLOG

    Commons BeanUtil之我的DynaBean

    下面是關于DynaBean的一個簡單實現:
    1、屬性類:
    package test;

    public class MyDynaProp {
        
    private String name;
        
    private Class<?> type;

        
    public MyDynaProp(String name, Class<?> type) {
            
    this.name = name;
            
    this.type = type;
        }

        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public Class<?> getType() {
            
    return type;
        }

        
    public void setType(Class<?> type) {
            
    this.type = type;
        }
    }

    2、Class接口:
    package test;

    public interface MyDynaClass {
        
    public MyDynaBean newInstance() throws Exception;

        
    public MyDynaProp getDynaProp(String name);

        
    public MyDynaProp[] getProps();
    }


    3、Class接口基本實現類:
    package test;

    import java.lang.reflect.Constructor;
    import java.util.HashMap;
    import java.util.Map;

    public class MyBasicDynaClass implements MyDynaClass {
        
    private String name;
        
    private MyDynaProp[] props =new MyDynaProp[0];
        
    protected Map<String, MyDynaProp> propMap = new HashMap<String, MyDynaProp>();
        
    protected static Class<?>[] constructorTypes = { MyDynaClass.class };
        
    protected Object[] constructorValues = this };
        
    protected Class<?> dynaBeanClass = MyBasicDynaBean.class;

        
    public MyBasicDynaClass(String name, MyDynaProp props[]) {
            
    this.name = name;
            
    this.props = props;
            
    this.propMap.clear();
            
    for(MyDynaProp prop:props){
                
    this.propMap.put(prop.getName(), prop);
            }

        }


        
    public String getName() {
            
    return name;
        }


        
    public MyDynaProp[] getProps() {
            
    return props;
        }


        
    public MyDynaBean newInstance() throws Exception {
            Constructor
    <?> constructor = this.dynaBeanClass.getConstructor(constructorTypes);
            
    return (MyDynaBean) constructor.newInstance(constructorValues);
        }


        
    public MyDynaProp getDynaProp(String name) {
            
    return this.propMap.get(name);
        }

    }


    4、Bean接口:
    package test;

    public interface MyDynaBean {
        
    public void set(String name, Object value);
        
    public Object get(String name);
    }


    5、Bean接口實現類:
    package test;

    import java.util.HashMap;
    import java.util.Map;

    public class MyBasicDynaBean implements MyDynaBean {
        
    protected MyDynaClass dynaClass = null;
        
    protected Map<String, Object> values = new HashMap<String, Object>();

        
    public MyBasicDynaBean(MyDynaClass cls) {
            dynaClass 
    = cls;
        }


        
    public Object get(String name) {
            
    return this.values.get(name);
        }


        
    public void set(String name, Object value) {
            MyDynaProp dynaProp 
    = this.dynaClass.getDynaProp(name);
            
    if (dynaProp == null || !this.isAssignable(dynaProp.getType(), value.getClass())) {
                
    throw new IllegalArgumentException("IllegalArgumentException");
            }

            
    this.values.put(name, value);
        }


        
    /** 驗證是否可賦值 */
        
    protected boolean isAssignable(Class<?> dest, Class<?> source) {
            
    boolean value = dest.isAssignableFrom(source) || (dest == Integer.TYPE && source == Integer.class)
                    
    || (dest == Boolean.TYPE && source == Boolean.class);
            
    return value;
        }


        
    public String toString() {
            MyDynaProp props[] 
    = this.dynaClass.getProps();
            StringBuffer sbValue 
    = new StringBuffer();
            
    for (MyDynaProp prop : props) {
                sbValue.append(prop.getName()).append(
    ":").append(values.get(prop.getName())).append(",");
            }

            
    return sbValue.toString();
        }

    }


    6、測試:
    package test;

    import java.util.Date;

    public class Test {
        
    public static void main(String[] args) {
            MyDynaProp[] props 
    = new MyDynaProp("name", String.class), new MyDynaProp("age", Integer.TYPE),
                    
    new MyDynaProp("date", Date.class), new MyDynaProp("isHero", Boolean.TYPE) }
    ;
            MyBasicDynaClass cls 
    = new MyBasicDynaClass("user", props);
            
    try {
                MyDynaBean bean 
    = cls.newInstance();
                bean.set(
    "name""SuperStar");
                bean.set(
    "age"12);
                bean.set(
    "date"new Date());
                bean.set(
    "isHero"true);

                System.out.println(bean);
            }
     catch (Exception e) {
                
    // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }

    }


    輸出如下:
    name:SuperStar,age:12,date:Mon May 04 21:31:19 CST 2009,isHero:true,

    posted on 2009-05-04 21:35 俊星 閱讀(872) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 中文字幕亚洲精品资源网| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 日本黄色动图免费在线观看| 亚洲精品国产精品国自产观看| 国产亚洲情侣久久精品| 暖暖免费高清日本一区二区三区| 亚洲色大成网站www永久男同| 亚洲人成网站在线观看播放动漫 | 老汉色老汉首页a亚洲| 免费精品一区二区三区第35| 久久精品国产亚洲AV果冻传媒| 久久精品免费电影| 666精品国产精品亚洲| 久久久久久曰本AV免费免费| 亚洲欧洲国产精品久久| 无码人妻久久一区二区三区免费丨| 亚洲国产成人精品激情| 国产精品1024在线永久免费| 亚洲爽爽一区二区三区| 在线观看免费黄色网址| 久久久亚洲AV波多野结衣| 国内精自视频品线六区免费| 亚洲伊人久久大香线蕉AV| 国产在线a不卡免费视频| 一级毛片在线播放免费| 国产精品久久久亚洲| 亚洲成年人免费网站| 亚洲精品无AMM毛片| 亚洲精品第一国产综合境外资源 | 特a级免费高清黄色片| 久久久无码精品亚洲日韩蜜桃 | 久久精品国产亚洲av麻豆小说| 日本视频一区在线观看免费| 亚洲中文无码永久免费| jlzzjlzz亚洲乱熟在线播放| 精品四虎免费观看国产高清午夜 | 久久99国产亚洲精品观看| 久久久www成人免费毛片| av电影在线免费看| 亚洲看片无码在线视频| 亚洲国产精品成人|