/**
* 實際運用2:由於BeanUtils只支持8種基本數據類型的轉換,因此要實現其他類型的轉化,就需要註冊該類型的轉換器。自定義轉換器
*
*/
public static void test03() {
// 使用ConverUtils對象的register()方法來註冊類型轉換器
// 1、第一個參數爲實現了Converter接口的對象,第二個參數爲要註冊的類型的class對象。
// 2、因此需要使用匿名內部類的方式重寫Converter的converter方法。
// 3、該方法最有有BeanUtils的setProperty()來調用
ConvertUtils.register(new Converter() {
// arg0這種情況產生的原因是因爲沒有導入源碼
/*
* public Object convert(Class arg0, Object arg1) { // TODO
* Auto-generated method stub return null; }
*/
@Override
public <T> T convert(Class<T> type, Object value) {
// 1、先對value進行判斷。看看是否符合條件
if (value == null) {
return null;
}
// 2、對value的值進行判斷,因爲我們要轉換的是String類型的
if (!(value instanceof String)) {
// 不是String,將該錯誤拋給調用他的方法
throw new ConversionException("值支持String類型的轉換!");
}
// 3、如果1、2都沒錯誤進行第三步,判斷value是否全是空格
String string = (String) value;
if (string.trim().equals("")) {
return null;
}
// 4、將含有值得字符轉轉換爲日期
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = (Date) df.parse(string);
} catch (ParseException e) {
// 將異常拋給下一級必須加上e——異常鏈不能斷。
throw new RuntimeException(e);
}
return (T) date;
}
}, Date.class);
Person p = new Person();
String date = "1992-09-12";
try {
BeanUtils.setProperty(p, "date", date);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(p.getDate());
}
BeanUtils註冊數據轉化類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.