2008-12-11 28 views
0

我有一个返回一个双精度数组的Java方法。然后,我想将这些值存储在调用函数中的各个变量中。有没有在Java中这样做的优雅方式。将数组中的变量直接设置为Java中的变量列表

我可以写,因为这:

double[] returnValues = calculateSomeDoubles(); 
double firstVar = returnValues[0]; 
double secondVar = returnValues[1]; 

我只是想知道是否有压缩下来,一条线路的一些方法?喜欢的东西:

(firstVar, secondVar) = calculateSomeDoubles(); 

这种类型的事情是,当脚本很容易,但Java的更强的类型意味着它可能是不可能的。

回答

5

基本上没有,这是不可能的。

您必须返回包含值的对象。

MyObject myObject = calculateMyObject(); 
1

唯一的方法是使用反射,并且事先知道“calculateSomeDouble”将返回多少项方法。

变体this将需要。但正如你所看到的,还有更多的代码。

那么引发的问题是?你想要这个自动化的东西?或者为了节省开发时间(避免复制/粘贴)?

如果你想自动化一些任务(比如在运行时填充一个对象),那么值得做反射调用和写入方法。

您将需要设置值而不是仅打印它。

客户端调用看起来应该像

SomeUtility.fill(myObject , withDoublesFromMethod()); 
1

当你没有,你得到2个值恢复您可以通过参考

打电话给你梅索德USIG通话
void methode(double[] array) 

你可以提交一个数组长度为2,把值iside的梅索德。

或者如果返回值可以更改,则返回Collection。

List methode() 

IA米没有返回值的朋友喜欢

double[] methode() 

当您使用列表或类别的梅索德是OT静态你使用数组处理。您可以在其他项目中更好地重用该方法。

0

我的第一本能是质疑你做这种事情的动机。如果您的程序中有一组相关的双打,为什么不将它们存储在列表中?

如果你是,你可以做这样的事情:

List<Double> myVars = Arrays.asList(calculateSomeDoubles()); 

但是如果你必须将它们存储在单个变量不能干净利落地一个行来完成。我建议你而不是使用一些建议的基于反射的解决方案。按照您的初步建议,简单地将您的作业写成多行可能会更好。

+0

我认为使用列表作为返回值(或类似的东西,也许是一个HashMap),但我认为,为了可读性,我最终将它们分配给更好的名称,所以返回一个双精度数组更容易。 – kaybenleroll 2008-12-11 18:10:58