在Kotlin中改进实现 – 方法默认参数

我正在尝试在Kotlin中 实现Android的Retrofit的入门 。 我已经创建了Retrofit类的实例,但是当我尝试在没有回调参数的接口中调用端点方法时,Kotlin似乎并不喜欢它。 这里是所有相关的代码。

数据类:

 data class GitHubRepo(val id:Int,val name:String) 

界面:

 interface GitHubClient { @GET("/users/{user}/repos") fun reposForUser(@Path("user") user: String,callback: Callback<List<GitHubRepo>> ) } 

改造实施:

  val httpClient = OkHttpClient.Builder() val builder = Retrofit.Builder().baseUrl(API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()) val retrofit = builder.client(httpClient.build()).build() val client = retrofit.create(GitHubClient::class.java) val call = client.reposForUser("fs-opensource") <-- Error - No value passed for parameter 'callback' 

从教程:

作为最后一个参数,您不会传递回调。 您使用客户端来获得一个调用对象。 一旦你在创建的调用对象上调用.enqueue,请求将通过Retrofit进行

我如何在Kotlin中实现?

reposForUser方法需要两个参数:一个String和一个Callback ,但是你只提供String

  client.reposForUser("fs-opensource") 

你可以通过这样做让你的回调“可选”:

 fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? ) 

我在回调类型后面添加了一个问号,以便说:这是一个空的参数。 如果你甚至想说, 没有回调是默认的 ,也使得客户端调用更方便,我建议你提供一个callback的默认值,如下所示:

 fun reposForUser(@Path("user") user: String, callback: Callback<List<GitHubRepo>>? = null) 

请注意,您现在需要以安全的方式访问callback ,因为它可能为空。 在这里阅读。