gpt4 book ai didi

kotlin - Kotlin中省略的 `Return`需要额外的代码。如何解决?

转载 作者:行者123 更新时间:2023-12-02 13:14:25 30 4
gpt4 key购买 nike

当我用Java(7)编写Rx Observable时,如下所示

private Observable observable = Observable.just("http://myurl.com/")
.map(new Function<String, Person>() {
@Override
public Person apply(String url) throws Exception {

Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
Response response = call.execute();

if (response.isSuccessful()) {
ResponseBody responseBody = response.body();
if (responseBody != null) {
return Person.parseFrom(responseBody.byteStream());
}
}

return null;
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());

当我将其转换为Kotlin时,如下所示
private val observable = Observable.just("http://myurl.com/")
.map{
val request = Request.Builder().url(it).build()
val call = okHttpClient.newCall(request)
val response = call.execute()

if (response.isSuccessful) {
val responseBody = response.body()
if (responseBody != null) {
Person.parseFrom(responseBody.byteStream())
} else {
null
}
} else {
null
}
}.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())

在Kotlin版本中,您可能会注意到我有两个 null。但是在Java中,我可以避免这样做,因为我可以在Map函数中使用return语句。在不复制 null的情况下,如何在Kotlin中实现该目标?

最佳答案

使用qualified return:

if (response.isSuccessful) {
val responseBody = response.body()
if (responseBody != null)
return@map Person.parseFrom(responseBody.byteStream())
}
return@map null

关于kotlin - Kotlin中省略的 `Return`需要额外的代码。如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47150579/

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