Java静态私有成员返回值

有下面一段Java代码,可以实现返回一个字符串吗?返回结果就是processMessage(message)的运行结果


```java
private static MessageListener messageListener = new MessageListener() {
        @Override
        public void onMessage(final Message message) {
            try {
                //1.收到消息之后一定要ACK。
                // 推荐做法:创建Session选择Session.AUTO_ACKNOWLEDGE,这里会自动ACK。
                // 其他做法:创建Session选择Session.CLIENT_ACKNOWLEDGE,这里一定要调message.acknowledge()来ACK。
                // message.acknowledge();
                //2.建议异步处理收到的消息,确保onMessage函数里没有耗时逻辑。
                // 如果业务处理耗时过程过长阻塞住线程,可能会影响SDK收到消息后的正常回调。
                executorService.submit(new Runnable() {
                    @Override
                    public void run() {
                        processMessage(message);
                    }
                });
            } catch (Exception e) {
                logger.error("submit task occurs exception ", e);
            }
        }
    };


```

onMessage方法返回类型是void,不会返回任何值
定义一个变量或者一个数据结构来存储processMessage(message)方法的返回值或者写个回调函数

将Runnable修改成Callable。使用Callable实现call。

 // 提交异步任务
        Future<Integer> future = executorService.submit(new Callable<Integer>() {
            public Integer call() throws Exception {
                // 逻辑
                return 100;
            }
        });
// 获取值
future.get();

以上如果对你有帮助,麻烦点一下采纳~谢谢。

【以下回答由 GPT 生成】

要实现返回processMessage(message)的结果作为字符串的功能,可以将MessageListeneronMessage方法改造为一个静态方法,并使用CompletableFuture来异步处理消息和返回结果。

具体步骤如下:

  1. MessageListeneronMessage方法改造为一个静态方法,返回CompletableFuture<String>类型的结果。
private static CompletableFuture<String> onMessage(Message message) {
    CompletableFuture<String> future = new CompletableFuture<>();
    try {
        // 1.收到消息之后一定要ACK。
        //    推荐做法: 创建Session选择Session.AUTO_ACKNOWLEDGE,这里会自动ACK。
        //    其他做法: 创建Session选择Session.CLIENT_ACKNOWLEDGE,这里一定要调message.acknowledge()来ACK。
        // message.acknowledge();

        // 2.建议异步处理收到的消息,确保onMessage函数里没有耗时逻辑。
        //   如果业务处理耗时过程过长阻塞住线程,可能会影响SDK收到消息后的正常回调。
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                String result = processMessage(message);
                future.complete(result);
            }
        });
    } catch (Exception e) {
        logger.error("submit task occurs exception", e);
        future.completeExceptionally(e);
    }
    return future;
}
  1. 修改原代码中的onMessage方法调用,将executorService.submit(...)改为调用刚刚改造的静态方法,并使用thenApply方法来获取结果。
private static MessageListener messageListener = new MessageListener() {
    @Override
    public void onMessage(final Message message) {
        onMessage(message).thenApply(result -> {
            // 处理返回结果
            return result;
        });
    }
};

通过以上步骤,processMessage(message)的结果作为字符串就可以被返回了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^