我正在尝试编写自己的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一个。为什么以及如何解决这个问题?
请指教 感谢
答案 0 :(得分:0)
String id = bub.getProperty(myObject, "id");
getProperty
类中的BeanUtilBean
函数必须返回您请求的属性的String
表示,无论该属性的定义格式如何。因此,它始终使用String
转换器(MyStringConverter
)。
由于此处的目标类型始终为String
,因此永远不会使用MyLongConverter
。
相反,MyStringConverter
应检查value参数的类型,并相应地将其转换为String
。