隨筆-35  評論-97  文章-0  trackbacks-0

          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, ""falsefalse);
                  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]

           

           

          posted on 2007-06-26 16:46 三告習習 閱讀(6702) 評論(0)  編輯  收藏 所屬分類: java/jdk
          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(10)

          我參與的團隊

          隨筆分類

          隨筆檔案

          blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 凉城县| 镇远县| 雷波县| 明水县| 孟津县| 弥勒县| 六枝特区| 阳春市| 元阳县| 石狮市| 中卫市| 诸暨市| 楚雄市| 阜平县| 茌平县| 姜堰市| 连城县| 平潭县| 武陟县| 会同县| 中山市| 高唐县| 平和县| 兴城市| 朝阳县| 平乡县| 临西县| 宜君县| 儋州市| 上栗县| 南投县| 平山县| 华坪县| 吉首市| 泊头市| 都昌县| 达州市| 成武县| 高雄县| 霍州市| 汝阳县|