将数组中的变量直接设置为 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 中的变量列表的主要内容,如果未能解决你的问题,请参考以下文章

将变量设置为列表中的下一个实例不起作用

如何将一个int变量a的第N位设置为1

从列表中提取值以将它们分配为 R 中的新变量

Python将列表重塑为ndim数组

将命令的输出设置为批处理文件中的变量[重复]

从 MySQL 设置一个数组,然后将每个值设置为变量 PHP