java - 不使用 `return` 将值传递给调用者

标签 java oop variable-assignment pass-by-reference

我有以下两个函数,我需要在第二个函数中设置一个 boolean 值,但我需要稍后在调用函数中使用该值。

限制:

  1. 我无法在第二个函数中返回 boolean 值。
  2. 由于线程安全,我不能将它用作全局变量。

实现此目标的最有效和最简洁的方法是什么?

private void F1()
{
    boolean foo = false;
    List<String> result = F2(foo);

    if(foo)
    {
        // do something
    }
}

private List<String> F2(boolean foo)
{
// Logic to set the result
    List<String> result = new ArrayList();

    if(condition)
    {
        foo = true;
    }

    return result;
}

最佳答案

您可以在boolean 周围使用可变包装器 来模拟按引用传递。 AtomicBoolean 可以重新用于此目的。您不会因为它的原子性而使用它,只是能够在一个函数中设置它的值并在另一个函数中读取它。

private void F1()
{
    AtomicBoolean foo = new AtomicBoolean(false);
    List<String> result = F2(foo);

    if(foo.get())
    {
        // do something
    }
}

private List<String> F2(AtomicBoolean foo)
{
// Logic to set the result
    List<String> result = new ArrayList();

    if(condition)
    {
        foo.set(true);
    }

    return result;
}

另一种常见但更笨拙的方法是使用单元素数组。

boolean[] foo = new boolean[] {false};

同样的技巧也适用。 F2 就可以了

foo[0] = true;

这很丑陋,但你会时不时地看到它,因为嘿,有时候你必须做你必须做的事。

关于java - 不使用 `return` 将值传递给调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151072/

相关文章:

java - 使用 Hibernate 的不区分大小写的枚举映射

delphi - 将接口(interface)的方法作为参数传递

php - 数据访问层和数据库抽象层的区别和重构数据库类

perl - perl 中的继承和默认构造函数

matlab - 在 Matlab 中设置元胞数组中每个矩阵的最后一个值

python - 在 Python 中同时分配索引不同的列表元素

java - 简单的空间修剪程序

Java NIO 窗口实现

java - 如果多重继承有菱形模式问题,那么多重接口(interface)也应该有同样的问题

python - 赋值语句值