gpt4 book ai didi

java - 访问匿名类外部的变量

转载 作者:行者123 更新时间:2023-11-30 05:52:14 26 4
gpt4 key购买 nike

我目前正在使用 IBM Watson java SDK 中包含的 IBM Speech to Text 服务。我试图将成绩单字符串设置为等于结果的成绩单。但是,当我运行此代码时,不会打印该值。我不确定为什么会发生这种情况,或者如何解决该问题。任何帮助,将不胜感激。我尝试在 main 方法之外使用带有静态变量的外部 setter ,但没有成功。

final String[] transcript = {""};
service.recognizeUsingWebSocket(options, new BaseRecognizeCallback() {
@Override
public void onTranscription(SpeechRecognitionResults speechResults) {
for(int i = 0; i < speechResults.getResults().size(); i++){
transcript[0] = transcript[0] + speechResults.getResults().get(i).getAlternatives().get(0).getTranscript() + "\n";
}
}
});
System.out.println(transcript[0]);

最佳答案

问题是 recognizeUsingWebSocket 是异步调用。因此,当您执行 System.out.println(transcript[0]) 时,您对 IBM Watson 服务的调用很可能尚未完成。

当回调方法onTranscription被触发时,您就会知道异步操作已经完成。因此,在该方法内部以及 for 循环之后,您可以确定 transcript 数组中已经包含了一些值。在那里,您可以对结果做任何您想做的事情。

如果您想在回调之外使用转录值,最简单的解决方案是在类中定义一个新方法,并在 onTranscript 回调末尾调用它。

...
public void onTranscriptReceived(String[] transcript) {
// Do whatever you want
}
...

final String[] transcript = {""};
service.recognizeUsingWebSocket(options, new BaseRecognizeCallback() {
@Override
public void onTranscription(SpeechRecognitionResults speechResults) {
for(int i = 0; i < speechResults.getResults().size(); i++){
transcript[0] = transcript[0] + speechResults.getResults().get(i).getAlternatives().get(0).getTranscript() + "\n";
}
onTranscriptReceived(transcript);
}
});

还有许多其他解决方案可以处理异步调用。就我个人而言,我喜欢ReactiveX图书馆,在你的情况下RxJava specifically 。学习可能需要一些时间,但绝对值得。

关于java - 访问匿名类外部的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53702229/

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