gpt4 book ai didi

Java - 带返回值的异步方法

转载 作者:行者123 更新时间:2023-12-01 18:59:40 24 4
gpt4 key购买 nike

我有一个关于java中异步方法调用的问题,特别是关于异步方法的响应值的问题。

情况如下:

我要调用的异步方法是..

public void getSpeed(IResponseListener listener) {
....
}

监听器的接口(interface)是...

interface IResponseListener {
public void response(ResponseEvent event);
}

当异步方法有响应值时调用此方法

我现在的问题是类ResponseEvent有一个属性response,可以是任何类型(boolean,float,String ...)并且在接口(interface)IResponseListener的实现中我必须转换该值...

IResponseListener listener = new IResponseListener {

public void response(ResponseEvent event) {
float f = (float)event.response;
}
}

这是处理这个问题的好解决方案吗?我认为坏事是响应监听器必须知道响应的类型!是否有更好的解决方案来处理想要给出响应的异步调用,即使响应可以是任何类型?

最佳答案

我认为很多答案都开始看起来像这样 ->

public interface Function<Args, Value>
{
public Value call(Args args);
}

你的返回类型并不重要——如果它可以返回多种类型,那么“多种类型”就是一种类型......考虑到你正在查看的内容,我可以建议一种 JSON 类型吗?

现实是您不能期望处理程序提前知道类型,因此您需要指定它。这是返回类型还是类取决于您。

我可以很容易地看到进行类层次结构:

public class ResponseString implements Function<Args, String>; 
public class ResponseNumber implements Function<Args, Number>;
...
public class ResponseType implements Function<Args, Type>;

或者只是创建一个包含您需要的所有信息的类型。总而言之,该方法可以定义它对类型的期望,并且您有能力扩展它们。请记住,响应也可以是可以执行的函数。知道如何处理某事但不知道它是什么并没有什么问题 ->

示例->

//Admittedly I'd probably have a "Procedure or VoidFunction interface as well".
public yourMethod(Function<String args, Function<String,?> handler)
{
String hello = "hello";
Function<String,?> function = handler.call(hello);
function.call(hello);
}

我希望这有帮助。有时没有理由走这么远,有时却有。您不知道类型 - 似乎您希望其他人能够提供它,而这可以在保持严格的同时为您做到这一点。

编辑: 在一个框架中拥有此功能的示例是:

  Applcation.openDialog(Dialog dialog, Callable<Boolean> onClose);

对话框清理并关闭时返回 true,否则返回 false。我并不关心这里发生了什么,我关心的是它告诉我"is",关闭它,或者“不”,不关闭。

关于Java - 带返回值的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12680273/

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