Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于类字段的强制转换函数返回类型_Java_Class_Object_Generics_Casting - Fatal编程技术网

Java 基于类字段的强制转换函数返回类型

Java 基于类字段的强制转换函数返回类型,java,class,object,generics,casting,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 (parseI

我有一门课看起来像

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

现在,我可以让这个函数返回一个对象,然后在得到结果时对其进行强制转换,但是有没有一种方法可以让该函数根据输入ParseValue的类类型字段进行强制转换?

最安全的方法是使
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);
    }
}
公共类解析值{
公共字符串值;
公共最终类类类型;
公共解析值(){
客观结果;
if(classType==String.class){
结果=值;
}else if(classType==Double.class){
结果=Double.valueOf(值);
}否则{
抛出新的RuntimeException(“未知值类型”);
}
返回classType.cast(结果);
}
}

是。但是您需要将
ParseValue
设置为泛型,并将
Class
字段也设置为泛型。另外一个问题是,我应该如何设置“classType”字段?从构造函数中,可以推测.public ParseField(){this.classType=T.Class;}似乎抛出错误“无法从类型变量中选择”.不知道你在问什么,但那不是有效代码。是的,那不行。您必须显式地传入类型,例如,
newparsevalue(“123”,Double.class)