在Kotlin中省略`Return`需要额外的代码。 如何解决这个问题?

当我在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语句。 我怎样才能在Kotlin中实现这一点,而不会重复null

使用合格的退货 :

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

更短

 val body = response.body if (response.isSuccessful && body != null) { Person.parseFrom(body.byteStream()) } else null