gpt4 book ai didi

java - 自动将字符串转换为动态确定的类型?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:35 25 4
gpt4 key购买 nike

我正在对 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有类似的功能吗?

并不要求它必须可扩展为自定义类型。我可以手动进行自定义类型的转换。

最佳答案

我不知道是否有内置的工具可以实现这一点,但是您绝对可以通过使用接口(interface)和将类型映射到转换器的映射来避免 if 链。

以下代码设置 map :

// 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);
}
});
}

设置 map 后,您可以进行如下转换:

int x = (int)mapper.get(Integer.class).fromString("123");
double y = (double)mapper.get(Double.class).fromString("1.23");

Here is a demo on ideone.

关于java - 自动将字符串转换为动态确定的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com