JAVA属性编辑器

java.beans.PropertyEditor的从字义来看是一个属性编辑器,但总觉得它的作用更像一个转换器--从字符串转换为类对象的属性。

java.beans.PropertyEditor接口定义的方法有好几个,但是最重要为下面两个:

 void setValue(Object value)

 void setAsText(String text) throws java.lang.IllegalArgumentException;

一般地,我们要使用PropertyEditor时,并不直接实现此接口,而是通过继承实现此接口的java.beans.PropertyEditorSupport来简化我们的工作,在子类覆盖setAsText方法就可以了,setValue方法一般不直接使用,在setAsText方法中将字符串进行转换并产生目标对象以后,由调setAsText调用setValue来把目标对象注入到编辑器中。当然,你可用覆盖更多的方法来满足你的特殊要求。JavaBean的类和接口,被大部分spring包使用,可以从spring中学习更成熟的JavaBean使用方法。

 

简单的例子:

实体类Person:

public class Person
{
    private String name;
    private String sex;
    private int age;
   
    public Person(String name, String sex, int age)
    {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
   
    public int getAge()
    {
        return age;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public String getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
   
    @Override
    public String toString()
    {
        return "Person["+name+", "+sex+", "+age+"]";
    }
}

Person的属性编辑器:

public class PersonPropertyEditor extends PropertyEditorSupport
{
    public void setAsText(String text)
    {
        setValue(parseString(text));
    }

    private Object parseString(String text)
    {
        String[] parts = tokenizeToStringArray(text, ", ", false, false);
        String name = (parts.length > 0 ? parts[0] : "undefine");
        String sex = (parts.length > 1 ? parts[1] : "undefine");
        int age = (parts.length > 2 ? Integer.valueOf(parts[2]) : 0);
        return (text.length() > 0 ? new Person(name, sex, age) : null);
    }

    private  String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens,
                                                    boolean ignoreEmptyTokens)
    {
        StringTokenizer st = new StringTokenizer(str, delimiters);
        List tokens = new ArrayList();
        while(st.hasMoreTokens())
        {
            String token = st.nextToken();
            if(trimTokens)
            {
                token = token.trim();
            }
            if(!ignoreEmptyTokens || token.length() > 0)
            {
                tokens.add(token);
            }
        }
        return toStringArray(tokens);
    }

    private  String[] toStringArray(Collection collection)
    {
        if(collection == null)
        {
            return null;
        }
        return (String[])collection.toArray(new String[collection.size()]);
    }
}

测试代码:

public static void main(String[] args)
    {
        PersonPropertyEditor editor = new PersonPropertyEditor();
        editor.setAsText("aSam,man,22");
        System.out.println(editor.getValue());
    }

 

结果输出:

Person[aSam, man, 22]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值