一尘不染

Java方法中的动态返回类型

java

我在这里多次看到类似的问题,但有一个很大的不同。

在其他问题中,返回类型将由参数确定。我想要/需要做的是通过解析后的值确定返回类型byte[]。从我收集到的信息来看,以下方法可行:

public Comparable getParam(String param, byte[] data) {
    if(param.equals("some boolean variable")
        return data[0] != 0;
    else(param.equals("some float variable") {
        //create a new float, f, from some 4 bytes in data
        return f;
    }
    return null;
}

我只是想确保在我搞砸任何东西之前,它有机会工作。提前致谢。


阅读 834

收藏
2020-12-03

共1个答案

一尘不染

你做不到
Java返回类型必须是固定的基本类型或对象类。我敢肯定,您能做的最好的事情就是返回一个包装器类型,该包装器类型具有可获取各种可能类型的值的方法,以及一个内部枚举,该枚举类型指示哪种有效。

-–编辑—在丹妮丝更正之后!

public <Any> Any getParam(boolean b){
return((Any)((Boolean)(!b)));
}
public <Any> Any getParam(float a) {
 return((Any)((Float)(a+1)));
}
public <Any> Any getParam(Object b) {
 return((Any)b);
}
public void test(){
  boolean foo = getParam(true);
  float bar = getParam(1.0f);
  float mumble = getParam(this); // will get a class cast exception
}

您仍然需要为装箱物品和类型检查返回的值付出一些代价,当然,如果您的调用与getParam的实现实际执行的操作不一致,则将获得类强制转换异常。

2020-12-03