【问题标题】:Set Variable from an Array directly into a List of Variables in Java将数组中的变量直接设置为 Java 中的变量列表
【发布时间】:2010-09-26 11:29:21
【问题描述】:

我有一个返回双精度数组的 Java 方法。然后我想将这些值存储在调用函数的各个变量中。在 Java 中是否有一种优雅的方式来做到这一点。

我可以这样写:

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

我只是想知道是否有某种方法可以将其压缩为一行?比如:

(firstVar, secondVar) = calculateSomeDoubles();

这种类型的事情在编写脚本时很容易,但 Java 的强大类型意味着它可能是不可能的。

【问题讨论】:

    标签: java function return


    【解决方案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),但我认为为了便于阅读,我最终还是会将它们分配给更好的名称,这样更容易返回一个双精度数组。
          猜你喜欢
          • 1970-01-01
          • 2019-04-20
          • 1970-01-01
          • 2014-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多