我正在对xml文件进行一些手动反序列化。我需要将xml文件中的所有值(即字符串)转换为正确的类型。
通过反射将xml标记的名称与对象中的Field
相匹配,我得到了正确的类型。
现在,我使用的代码有点难看:
Field matchedField = getMatchingField(getNodeName(node));
Class<?> type = matchedField.getType();
if (Integer.class.isAssignableFrom(type))
{
return Integer.parseInt(parseNode(node));
}
else if (Double.class.isAssignableFrom(type))
{
return Double.parseDouble(parseNode(node));
}
else if // ... etc for all the types I am using
有没有办法自动化这个过程?类似的东西:
return ConvertToType(type, parseNode(node));
似乎C#有这样的东西,Java有类似的功能吗?
这不是必须为自定义类型扩展。我可以手动转换自定义类型。
答案 0 :(得分:1)
我不知道是否有内置功能,但您可以通过使用接口和将类型映射到转换器的地图来避免if
链。
以下代码设置地图:
// This interface defines the conversion method
interface Converter {
Object fromString(String s);
}
// This map has one converter per supported class
static final Map<Class,Converter> mapper = new HashMap<Class,Converter>();
static {
mapper.put(Integer.class, new Converter() {
public Object fromString(String s) {
return Integer.parseInt(s);
}
});
mapper.put(Double.class, new Converter() {
public Object fromString(String s) {
return Double.parseDouble(s);
}
});
}
设置地图后,您可以执行以下转换:
int x = (int)mapper.get(Integer.class).fromString("123");
double y = (double)mapper.get(Double.class).fromString("1.23");