2012-04-24 51 views
0

我想驗證Java類對象以檢查成員是否遵守某些規則。除特定的規則外,我還想檢查是否有任何空字符串成員。驗證Java中的類的成員

這樣做的好方法是什麼(驗證字符串成員)?

我的做法是:

if(StringUtils.isNotEmpty(sMember1) && StringUtils.isNotEmpty(sMember2)...) 

是否有確認這是字符串的所有成員的一個簡潔的方法嗎?

(反思是一種可能性?如果是,會是一個昂貴的操作?)

回答

1

我還建議使用JSR 303作爲@krishnakumarp指出的,我不會構建自己的框架,而是使用任何已有的框架。但是,如果你想了解你怎麼能實現它,那麼它的其實很簡單:

public static Collection<ErrorMessage> validate(Object obj) { 
    Collection<ErrorMessage> errors = new ArrayList<ErrorMessage>(); 
    Field[] fields = obj.getClass().getDeclaredFields(); 
    for (Field field : fields) { 
     field.setAccessible(true); 
     if (field.getType().equals(String.class)) { 
      try { 
       String value = (String) field.get(obj); 
       if (isEmpty(value)) { 
        errors.add(new ErrorMessage(field.getName() + " is empty")); 
       } 
      } 
      catch (Exception e) { 
       // oops. 
       e.printStackTrace(); 
      } 
     } 
    } 
    return errors; 
} 

請注意,在這個例子中,有一個自定義錯誤處理和每個驗證錯誤的ErrorMessage對象被建造。

0

爲什麼不考慮在使用同一個對象的setters方法設置成員時檢查成員的有效性?在對它們進行任何操作之前檢查對象成員的有效性是很好的做法,但海事組織一旦設置就可以立即進行驗證。如果這些值不合適,則允許操作(在覈心類中)向上層引發適當的異常。

注意: 如果您沒有重構舊版片段,但正在編寫新的數據對象,則此方法是可行的。