gpt4 book ai didi

java - 我可以从函数返回一个值并让该函数继续运行代码吗

转载 作者:行者123 更新时间:2023-11-30 04:59:49 24 4
gpt4 key购买 nike

我正在实现一个接口(interface)。

我有两个函数必须实现 A 和 B。A 检查文件是否损坏并返回,然后 B 处理文件并返回。 B 返回函数 C 运行后,我无法控制 C,因为我只是实现 A 和 B。

问题是B需要很长时间才能运行,而C需要它返回值才能运行。理想情况下,我会将 B 拆分为 B 和 D,并将 C 不需要运行的所有内容放入 D 中。因为这是不可能的,我想知道是否可以从 B 返回一个值,以便 C 可以运行,但之后就会有B 运行更多代码。

B 无法调用 C。

最佳答案

A 必须调用 BC 您希望 B 进行一些处理,C 被调用,B 继续处理。

最简单的方法是

A 调用了 B 上的方法,该方法打开文件并进行一些处理,并保留稍后需要的任何内容。 A 调用 C,然后调用 B 上的另一个方法来完成处理。这意味着 B 必须知道何时停止并返回,以便可以调用 C

解决这个问题的方法是使用下面的监听器接口(interface)。

class A {
void method(B b, C c) {
b.function(new Listener() {
public void onValue(long num) { // or any event type
if (num > 100) C.something();
}
});
}
}

这样 B 就不知道 C 何时被调用。

<小时/>

您可以实现一个监听器接口(interface),将其传递给函数,它可以“返回”多个值。然而,一旦函数实际返回,它就不再运行。

该函数可以在另一个线程或同一线程中运行。

interface Listener {
public void onValue(long num);
public void onError(Exception e);
public void onEndOfData();
}

public void function(Listener l) {
try {
for(int i=0;i<10;i++) l.onValue(i);

// read a file
} catch (Exception e) {
l.onError(e);
} finally {
l.onEndOfData();
}
}

换一种方式而不是做类似的事情

// only one value.
long value = function();
System.out.println("value returned was "+value);

你可以做到

// any number of values can be returned 
// and the function can keep processing.
function(new Listener() {
public void onValue(long value) {
System.out.println("value returned was "+value);
}
});

关于java - 我可以从函数返回一个值并让该函数继续运行代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7203892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com