我有一个Java方法,它返回一个双精度数组。然后,我想将这些值存储在调用函数中的各个变量中。在Java中是否有一种优雅的方式。
我可以这样写:
double[] returnValues = calculateSomeDoubles();
double firstVar = returnValues[0];
double secondVar = returnValues[1];
我只是想知道是否有某种方法可以将其压缩到单行?类似的东西:
(firstVar, secondVar) = calculateSomeDoubles();
这种类型的东西在编写脚本时非常容易,但Java的强类型意味着它可能是不可能的。
答案 0 :(得分:5)
基本上不,这是不可能的。
您必须返回包含值的对象。
MyObject myObject = calculateMyObject();
答案 1 :(得分:1)
唯一的方法是使用反射,前提是你知道方法“calculateSomeDouble”将返回多少项。
需要 this 的变体形式。但正如你所看到的那样,代码还有更多。
那么提出的问题是什么?你想要这个自动化的东西吗?或者节省开发时间(避免复制/粘贴)?
如果要自动完成某项任务(比如在运行时填充对象),则可以进行反射调用并编写方法。
您需要设置值而不是仅打印它。
客户端调用应该看起来像
SomeUtility.fill( myObject , withDoublesFromMethod() );
答案 2 :(得分:1)
当你没有得到2个双值时,你可以通过参考
来调用你的方法void methode(double[] array)
您可以提交长度为2的数组,并将值放在方法之前。
如果返回的值可以更改,则返回Collection。
List methode()
我不是像
那样返回值的朋友double[] methode()
当您使用Lists或Collections时,methode与您处理数组时一样静态。您可以在其他项目中更好地重用该方法。
答案 3 :(得分:0)
我的第一直觉是质疑你做这样事情的动机。如果您的程序中有一组相关的双打,为什么不将它们存储在列表中?
如果你是,你可以做这样的事情:
List<Double> myVars = Arrays.asList(calculateSomeDoubles());
但是如果你必须将它们存储在单独的变量中,那么就无法在一行中干净利落地完成它们。我建议你不使用一些建议的基于反射的解决方案。如您最初建议的那样简单地在多行中写出您的作业可能会好得多。