首页 > 解决方案 > 如何在不退出函数的情况下从函数返回值?

问题描述

我正在从另一个字节数组列表的数组列表中添加字节数组。所以,基本上,我在玩嵌套字节数组。我能够添加每个字节数组的第一个索引,但我无法立即返回它。添加所有索引后,该函数将返回整个字节数组。但是,我想分别返回每个索引的总和。

public static byte[] final_stream(ArrayList<ArrayList<byte[]>> outerstream) {

    ArrayList<byte[]> streams = new ArrayList<byte[]>();
    int x = 0;
    while (x < outerstream.size()) {
        streams = new ArrayList<byte[]>();
        for (ArrayList<byte[]> bytes : outerstream) {
            streams.add(bytes.remove(0));
        }
        x++;
        return stream_Addr(streams);  // Here I want to return the value

    }
}  // Here it gives error to return byte[]

标签: javaarraylist

解决方案


您的代码在许多层面上都是错误的,一个快速(可能不完整)的列表:

  • 你违反了java命名约定。方法名也使用 camelCase() 和变量名(除非常量)。而且您只使用“_”作为 SOME_CONSTANT
  • 术语“流”在 Java 中具有非常特殊的含义。列表不是流(但您可以列表中创建真正的 java 流)yourList.stream()
  • 是的,你打算在那个while循环中做什么超出了我的创造力来解释。老实说:把它扔掉,从头开始。

关于您的真正问题:非 void 方法的每个“退出”路径都需要抛出异常或返回某些内容。

最后:你打算做的事情在 Java 中是不可能的。调用者调用一个方法,该方法返回一个值,然后结束

可以做的,是这样的:

  • 线程A以某种方式创建someList并将其传递给某个线程B
  • 线程 B 操作该列表对象,并且通过使用适当的同步,另一个线程可以访问该数据(而 B 继续进行更新)

真正的答案是:你不能通过假设语言支持你从其他语言(如 python 生成器)中知道的概念来学习新语言,然后发明你自己的语法或用新语言构造然后感到惊讶“天哪,它不起作用”。反过来说:你研究你的目标语言是否有这样的概念,如果没有,你研究还有什么提供。然后,您阅读了有关该内容的教程,然后按照该教程进行操作。


推荐阅读