Java 将值传递给调用者而不使用`返回'`
我有以下两个函数,其中,我需要在第二个函数中设置一个布尔值,但我需要稍后在调用函数中使用该值 限制: 我无法在第二个函数中返回布尔值。 由于线程安全,我不能将其用作全局变量。 实现这一目标的最有效和最清洁的方法是什么Java 将值传递给调用者而不使用`返回'`,java,oop,variable-assignment,pass-by-reference,Java,Oop,Variable Assignment,Pass By Reference,我有以下两个函数,其中,我需要在第二个函数中设置一个布尔值,但我需要稍后在调用函数中使用该值 限制: 我无法在第二个函数中返回布尔值。 由于线程安全,我不能将其用作全局变量。 实现这一目标的最有效和最清洁的方法是什么 private void F1() { boolean foo = false; List<String> result = F2(foo); if(foo) { // do something } } pri
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;
}
您可以使用一个围绕布尔值的可变包装器来模拟按引用传递。原子布尔可以重新分配用于此目的。你不会因为它的原子性而使用它,只是能够在一个函数中设置它的值,然后在另一个函数中读取它
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;
}
同样的伎俩也适用。F2就行了
这很难看,但你会不时看到它,因为有时候你必须做你必须做的事情。你可以使用布尔值的可变包装来模拟按引用传递。原子布尔可以重新分配用于此目的。你不会因为它的原子性而使用它,只是能够在一个函数中设置它的值,然后在另一个函数中读取它
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;
}
同样的伎俩也适用。F2就行了
这很难看,但你会不时看到它,因为有时候你必须做你必须做的事情。分配foo是完全无用的,因为这不会反映在调用方法中
但是,有几种方法可以实现相同的结果:
使用数组:
private void F1() {
boolean foo[] = new boolean[1];
List<String> result = F2(foo);
if(foo[0]) {
// do something
}
}
private List<String> F2(boolean[] foo) {
// Logic to set the result
List<String> result = new ArrayList();
if(condition) {
foo[0] = true;
}
return result;
}
在需要对象的地方返回null是一种常见的方法,用于指示出现了问题,并且结果不被认为是有效的。不要误认为结果列表是空的,这可能表明一切都很好,只是没有什么可以返回
引发异常:
private void F1() {
try {
List<String> result = F2();
// do something
} catch (Exception e) {
e.printStackTrace();
}
}
private List<String> F2() {
// Logic to set the result
List<String> result = new ArrayList();
if(!condition) {
throw new Exception("Condition not met");
}
return result;
}
在这里,它可以是选中的或未选中的异常,具体取决于您想要的效果。也常用于指示输入不正确、由于外部原因I/O出现了一些错误、系统处于不允许此操作的状态……分配foo是完全无用的,因为这不会反映在调用方法中
但是,有几种方法可以实现相同的结果:
使用数组:
private void F1() {
boolean foo[] = new boolean[1];
List<String> result = F2(foo);
if(foo[0]) {
// do something
}
}
private List<String> F2(boolean[] foo) {
// Logic to set the result
List<String> result = new ArrayList();
if(condition) {
foo[0] = true;
}
return result;
}
在需要对象的地方返回null是一种常见的方法,用于指示出现了问题,并且结果不被认为是有效的。不要误认为结果列表是空的,这可能表明一切都很好,只是没有什么可以返回
引发异常:
private void F1() {
try {
List<String> result = F2();
// do something
} catch (Exception e) {
e.printStackTrace();
}
}
private List<String> F2() {
// Logic to set the result
List<String> result = new ArrayList();
if(!condition) {
throw new Exception("Condition not met");
}
return result;
}
在这里,它可以是选中的或未选中的异常,具体取决于您想要的效果。也常用,例如,指示输入不正确,由于外部原因I/O出现了一些错误,系统处于不允许此操作的状态…为什么需要消除警告?听起来像是家庭作业。这怎么可能是家庭作业呢。这是为了更好地理解java实践。为什么需要消除警告?听起来像是家庭作业。这怎么可能是家庭作业呢。这是为了更好地理解java实践。