我想驗證Java類對象以檢查成員是否遵守某些規則。除特定的規則外,我還想檢查是否有任何空字符串成員。驗證Java中的類的成員
這樣做的好方法是什麼(驗證字符串成員)?
我的做法是:
if(StringUtils.isNotEmpty(sMember1) && StringUtils.isNotEmpty(sMember2)...)
是否有確認這是字符串的所有成員的一個簡潔的方法嗎?
(反思是一種可能性?如果是,會是一個昂貴的操作?)
我想驗證Java類對象以檢查成員是否遵守某些規則。除特定的規則外,我還想檢查是否有任何空字符串成員。驗證Java中的類的成員
這樣做的好方法是什麼(驗證字符串成員)?
我的做法是:
if(StringUtils.isNotEmpty(sMember1) && StringUtils.isNotEmpty(sMember2)...)
是否有確認這是字符串的所有成員的一個簡潔的方法嗎?
(反思是一種可能性?如果是,會是一個昂貴的操作?)
你應該使用符合jsr 303的驗證器。請參閱此討論Is there an implementation of JSR-303 (bean validation) available?
有很多關於該框架和庫的。看看http://oval.sourceforge.net/
我還建議使用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
對象被建造。
爲什麼不考慮在使用同一個對象的setters方法設置成員時檢查成員的有效性?在對它們進行任何操作之前檢查對象成員的有效性是很好的做法,但海事組織一旦設置就可以立即進行驗證。如果這些值不合適,則允許操作(在覈心類中)向上層引發適當的異常。
注意: 如果您沒有重構舊版片段,但正在編寫新的數據對象,則此方法是可行的。