0

我正在尝试编写自己的 bean utils 转换器,以便可以将对象导出到纯文本文件

我有主课

 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,但它似乎仍在通过 String 之一。为什么以及如何解决这个问题?

请指教 谢谢

4

1 回答 1

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

类中的上述getProperty函数BeanUtilBean必须返回String您请求的属性的表示形式,无论该属性是什么格式定义的。因此,它将始终使用String转换器 ( MyStringConverter)。

由于这里的目标类型是 always StringMyLongConverter将永远不会使用。

相反,MyStringConverter应该检查 value 参数的类型并相应地将其转换为String.

于 2012-07-17T20:24:11.007 回答