ConvertUtils,這個(gè)工具類(lèi)的職能是在字符串和指定類(lèi)型的實(shí)例之間進(jìn)行轉(zhuǎn)換。

 

 

目前支持的類(lèi)型有:

 

 

  • java.lang.BigDecimal

     

  • java.lang.BigInteger

     

  • boolean and java.lang.Boolean

     

  • byte and java.lang.Byte

     

  • char and java.lang.Character

     

  • java.lang.Class

     

  • double and java.lang.Double

     

  • float and java.lang.Float

     

  • int and java.lang.Integer

     

  • long and java.lang.Long

     

  • short and java.lang.Short

     

  • java.lang.String

     

  • java.io.File

     

  • java.net.URL

     

  • java.sql.Date

     

  • java.sql.Time

     

  • java.sql.Timestamp

     

總體提供兩類(lèi)功能:

 

 

1.         將字符串轉(zhuǎn)換為指定類(lèi)型;

 

 

2.         注冊(cè)、注銷(xiāo)和查詢類(lèi)型轉(zhuǎn)換器;

convert(java.lang.Object value)

將任意的實(shí)例轉(zhuǎn)變?yōu)?font face='"Times' New Roman">String,用法非常簡(jiǎn)單。在嘗試的過(guò)程中,感覺(jué)與調(diào)用實(shí)例上的toString()方法的效果一樣,不知道是不是在這個(gè)方法內(nèi)僅僅是調(diào)用了傳入實(shí)例的toString()方法。

ps:需要讀源代碼才能清楚。

convert(java.lang.String value, java.lang.Class clazz)

 

將字符串value轉(zhuǎn)換為clazz的一個(gè)實(shí)例;如果失敗的話,就以String的形式返回value

 

 

convert(java.lang.String[] values, java.lang.Class clazz)

 

這個(gè)方法是對(duì)前一方法的加強(qiáng)版,將數(shù)組中的每個(gè)value都進(jìn)行轉(zhuǎn)換,最后以Object返回。(數(shù)組也是Object啊)

 

 

deregister()和deregister(java.lang.Class clazz)

注銷(xiāo)轉(zhuǎn)換器,前者將所有的轉(zhuǎn)換器注銷(xiāo)掉,后者只注銷(xiāo)對(duì)應(yīng)于clazz的轉(zhuǎn)換器。注銷(xiāo)在這里不是徹底刪除了,而是將轉(zhuǎn)換器變?yōu)槟J(rèn)的轉(zhuǎn)換器(apache commons提供的)。

lookup(java.lang.Class clazz)

獲取指定類(lèi)型clazz的轉(zhuǎn)換器.

register(Converter converter, java.lang.Class clazz)

為指定類(lèi)型clazz注冊(cè)轉(zhuǎn)換器converter。如果clazz已經(jīng)存在一個(gè)對(duì)應(yīng)的轉(zhuǎn)換器,那么converter,將覆蓋原來(lái)的轉(zhuǎn)換器。也就是說(shuō),我們可以為String,Double創(chuàng)建自定義的類(lèi)型轉(zhuǎn)換器,并在注冊(cè)后進(jìn)行使用。

ps:apache的類(lèi)定義明確,描述非常清楚,所以就不貼出例子了。當(dāng)然這只是到達(dá)可以正常使用的階段,如果要進(jìn)行改造或者創(chuàng)建自己的ConvertUtils,那可能需要更多的時(shí)間,因?yàn)檫€要去參考ConvertUtilsBean,這里就不詳述了。

以下為使用convertUtils的一個(gè)DATE類(lèi)型的例子(該例子來(lái)源于尚學(xué)堂視屏)
1.定義converter

 1package com.bjsxt.oa.web;
 2
 3import java.text.ParseException;
 4import java.text.SimpleDateFormat;
 5import java.util.Date;
 6
 7import org.apache.commons.beanutils.Converter;
 8
 9public class UtilDateConverter implements Converter {
10    
11    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
12
13    public Object convert(Class type, Object value) {
14        if (value == null{
15            return value;
16        }

17        if (value instanceof Date) {
18            return value;
19        }

20        if (value instanceof String) {
21            try {
22                return format.parse((String)value);
23            }
 catch (ParseException e) {
24                e.printStackTrace();
25            }

26        }

27        return null;
28    }

29
30}

31
2.使用convertUilts注冊(cè)converter
 1package com.bjsxt.oa.web;
 2
 3import java.util.Date;
 4
 5import javax.servlet.ServletException;
 6import javax.servlet.http.HttpServlet;
 7
 8import org.apache.commons.beanutils.ConvertUtils;
 9
10public class UtilDateConverterInitServlet extends HttpServlet {
11
12    @Override
13    public void init() throws ServletException {
14         ConvertUtils.register(new UtilDateConverter(), Date.class);
15    }

16
17}

18
3.在web.xml中配置servlet
1 <servlet>
2    <servlet-name>utilDateConverter</servlet-name>
3    <servlet-class>com.bjsxt.oa.web.UtilDateConverterInitServlet</servlet-class>
4    <load-on-startup>3</load-on-startup>
5  </servlet>