【发布时间】:2018-07-27 19:29:42
【问题描述】:
我有一个函数试图将字段名称(字符串)映射到类类型,然后能够根据输入字段名称将输入字符串转换为正确的类型。
public class Parser {
private final Map<String, Class> mapping;
public Parser(Map<String, Class> inputMapping){
this.mapping = inputMapping;
}
public T parseString(String fieldName, String parseValue){
Object convertedObject;
Class<T> classType = mapping.get(fieldName);
if(classType == String.class) {
convertedObject = parseValue;
} else if (classType == Double.class) {
convertedObject = Double.valueOf(parseValue);
} else {
throw new UnimplementedException("Invalid type");
}
return classType.cast(convertedObject);
}
}
我收到了错误,尽管在引用 parseString 的返回类型中使用的 T 时说“找不到符号 'T'”。无论如何要纠正这个错误或重新组织函数以具有相同的行为?
谢谢!
【问题讨论】:
-
您不能安全地执行此操作。您所能做的就是返回
Object。 -
public <T> T parseString -
@Aominè.... 这不是类型安全的,因为您可以调用
Integer i = parseString("field", "parse");和Double d = parseString("field", "parse");。 -
@AndyTurner 我没有太注意描述,但肯定解决了 OP 遇到的编译错误。
-
@Aominè 不要将编译时错误更改为运行时错误。前者比后者更容易捕捉。
标签: java class generics casting