我有以下两个函数,我需要在第二个函数中设置一个 boolean 值,但我需要稍后在调用函数中使用该值。
限制:
- 我无法在第二个函数中返回 boolean 值。
- 由于线程安全,我不能将它用作全局变量。
实现此目标的最有效和最简洁的方法是什么?
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/