基于类场的投射函数返回类型

时间:2018-02-14 00:52:16

标签: java class object generics casting

我有一个看起来类似的课程。

public class ParseValue {
  public String value;
  public final Class classType;
}

我想创建一个执行转换的函数并返回一个转换值。

public T parseValue(ParseValue parseInfo) {
  if(parseInfo.classType == String.class) {
    return parseInfo.value;
  } else if (parseInfo.classType == Double.class) {
    return Double.valueOf(parseInfo.value);
  }
}

现在我可以让这个函数返回一个Object,然后在获得结果时抛出它,但有没有办法让函数根据输入的ParseValue的classType字段进行强制转换?

1 个答案:

答案 0 :(得分:3)

最安全的方法是ParseValue通用:

public class ParseValue<T> {
    public String value;
    public final Class<T> classType;

    public T parseValue() {
        Object result;
        if (classType == String.class) {
            result = value;
        } else if (classType == Double.class) {
            result = Double.valueOf(value);
        } else {
            throw new RuntimeException("unknown value type");
        }
        return classType.cast(result);
    }
}