2012-07-17 3 views
0

내가사용자 정의 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: 

내가 MyLongConverter을 통해 이동합니다 ID를 기대했지만, 여전히 문자열 하나를 통해가는 것 같다. 왜, 어떻게 고칠 수 있습니까? BeanUtilBean 클래스 getProperty 기능에 관계없이 정의 된 어떤 속성을 포맷의, 사용자가 요청한 속성의 String 표현을 반환하는 위

는 감사

답변

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

을 알려 주시기 바랍니다. 따라서 항상 변환기 String (MyStringConverter)을 사용합니다.

여기서 대상 유형은 항상 String이므로 MyLongConverter은 절대로 사용되지 않습니다.

대신 MyStringConverter은 값 매개 변수의 유형을 검사해야하므로 String으로 변환해야합니다.

+0

이것은 맞습니다. 각 유형을 문자열로 변환하려면 많은 경우 if/else를 수행해야합니다. 나는 변환기가 언제 ("from") 형식으로 변환하는지 생각합니다. 하지만 실제로 "로 변환 중" –