2012-07-17 64 views
0

我試圖寫我自己的豆utils的轉換器,這樣我可以在我的對象導出到一個純文本文件定製的BeanUtils轉換不叫

我有主類

public class BeanUtilsTest { 
    public static void main(String[] args) { 
     try{ 
     MyObject myObject = new MyObject(); 
     myObject.setId(3l); 
     myObject.setName("My Name"); 

     ConvertUtilsBean cub = new ConvertUtilsBean(); 
     cub.deregister(String.class); 
     cub.register(new MyStringConverter(), String.class); 
     cub.deregister(Long.class); 
     cub.register(new MyLongConverter(), Long.class); 

     System.out.println(cub.lookup(String.class)); 
     System.out.println(cub.lookup(Long.class)); 

     BeanUtilsBean bub = new BeanUtilsBean(cub, new PropertyUtilsBean()); 

     String name = bub.getProperty(myObject, "name"); 
     System.out.println(name); 
     String id = bub.getProperty(myObject, "id"); 
     System.out.println(id); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

漫長的轉換

public class MyLongConverter implements Converter{ 

    @Override 
    public Object convert(Class clazz, Object value) { 
     System.out.println("Long convert"); 
     return value.toString()+"l"; 
    } 

} 

的字符串轉換

public class MyStringConverter implements Converter{ 

    @Override 
    public Object convert(Class clazz, Object value) { 
     System.out.println("String convert"); 
     return value.toString()+":"; 
    } 
} 

最後我對象

public class MyObject { 
    Long id; 
    String name; 
    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

輸出

String convert 
My Name: 
String convert 
3: 

我期待的ID將通過MyLongConverter,但似乎仍在通字符串之一。爲什麼以及如何解決這個問題?

請告知 感謝

回答

0
String id = bub.getProperty(myObject, "id"); 

以上BeanUtilBeangetProperty函數必須返回你所要求的屬性String表示,無論是定義什麼格式的屬性。所以,它總是會使用String轉換器(MyStringConverter)。

由於此處的目的地類型始終爲String,因此永遠不會使用MyLongConverter

相反,MyStringConverter應檢查值參數的類型,並相應地將其轉換爲String

+0

這是正確的。如果將每種類型轉換爲字符串,我必須做很多if/else if case。我認爲轉換器在我註冊時會轉換哪種(「從」)類型。但它實際上是將「轉換」爲「 – 2012-07-19 19:12:05