java.beans.PropertyEditor的從字義來看是一個(gè)屬性編輯器,但總覺得它的作用更像一個(gè)轉(zhuǎn)換器--從字符串轉(zhuǎn)換為類對(duì)象的屬性。
java.beans.PropertyEditor接口定義的方法有好幾個(gè),但是最重要為下面兩個(gè):
void setValue(Object value)
void setAsText(String text) throws java.lang.IllegalArgumentException;
一般地,我們要使用PropertyEditor時(shí),并不直接實(shí)現(xiàn)此接口,而是通過繼承實(shí)現(xiàn)此接口的java.beans.PropertyEditorSupport來簡(jiǎn)化我們的工作,在子類覆蓋setAsText方法就可以了,setValue方法一般不直接使用,在setAsText方法中將字符串進(jìn)行轉(zhuǎn)換并產(chǎn)生目標(biāo)對(duì)象以后,由調(diào)setAsText調(diào)用setValue來把目標(biāo)對(duì)象注入到編輯器中。當(dāng)然,你可用覆蓋更多的方法來滿足你的特殊要求。JavaBean的類和接口,被大部分spring包使用,可以從spring中學(xué)習(xí)更成熟的JavaBean使用方法。
簡(jiǎn)單的例子:
實(shí)體類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()]);
}
}
測(cè)試代碼:
public static void main(String[] args)

{
PersonPropertyEditor editor = new PersonPropertyEditor();
editor.setAsText("aSam,man,22");
System.out.println(editor.getValue());
}
結(jié)果輸出:
Person[aSam, man, 22]
posted on 2007-06-26 16:46
三告習(xí)習(xí) 閱讀(6693)
評(píng)論(0) 編輯 收藏 所屬分類:
java/jdk