Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将值传递给调用者而不使用`返回'`_Java_Oop_Variable Assignment_Pass By Reference - Fatal编程技术网

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实践。