将数组中的变量直接设置为 Java 中的变量列表
Posted
技术标签:
【中文标题】将数组中的变量直接设置为 Java 中的变量列表【英文标题】:Set Variable from an Array directly into a List of Variables in Java 【发布时间】:2010-09-26 11:29:21 【问题描述】:我有一个返回双精度数组的 Java 方法。然后我想将这些值存储在调用函数的各个变量中。在 Java 中是否有一种优雅的方式来做到这一点。
我可以这样写:
double[] returnValues = calculateSomeDoubles();
double firstVar = returnValues[0];
double secondVar = returnValues[1];
我只是想知道是否有某种方法可以将其压缩为一行?比如:
(firstVar, secondVar) = calculateSomeDoubles();
这种类型的事情在编写脚本时很容易,但 Java 的强大类型意味着它可能是不可能的。
【问题讨论】:
【参考方案1】:唯一的方法是使用反射,前提是您预先知道“calculateSomeDouble”方法将返回多少项。
需要 this 的变体。但正如您所见,还有更多需要编写的代码。
所以提出的问题是?你想要这个自动化的东西吗?还是为了节省开发时间(避免复制/粘贴)?
如果您想自动执行某些任务(例如在运行时填充对象),那么值得进行反射调用并编写方法。
您将需要设置该值,而不仅仅是打印它。
客户端调用应该是这样的
SomeUtility.fill( myObject , withDoublesFromMethod() );
【讨论】:
【参考方案2】:基本上不,这是不可能的。
您必须返回一个包含这些值的对象。
MyObject myObject = calculateMyObject();
【讨论】:
【参考方案3】:当你不知道你得到 2 个双精度值时,你可以通过引用调用你的方法 usig 调用
void methode(double[] array)
您可以提交一个长度为 2 的数组并将值放在方法中。
或者,如果返回的值可以更改,则返回 Collection。
List methode()
我不是像
这样返回值的朋友double[] methode()
当您使用列表或集合时,方法不像您处理数组那样是静态的。您可以在其他项目中更好地重用该方法。
【讨论】:
【参考方案4】:我的第一反应是质疑你做这种事情的动机。如果您的程序中有一组相关的双精度,为什么不将它们存储在一个列表中?
如果你是,你可以这样做:
List<Double> myVars = Arrays.asList(calculateSomeDoubles());
但是,如果您必须将它们存储在单独的变量中,则无法在一行中干净地完成。我建议您不要使用一些建议的基于反射的解决方案。按照你最初的建议,简单地把你的作业写成多行可能会好得多。
【讨论】:
我考虑使用列表作为返回值(或类似的东西,可能是 HashMap),但我认为为了便于阅读,我最终还是会将它们分配给更好的名称,这样更容易返回一个双精度数组。以上是关于将数组中的变量直接设置为 Java 中的变量列表的主要内容,如果未能解决你的问题,请参考以下文章