使用包含已实现方法的 Kotlin 特性进行改造
Retrofit with Kotlin traits that include implemented methods
只要没有实施额外的方法,Traits 就可以很好地与 Retrofit 配合使用。根据 return 类型 RetrofitError: TwitchApi.someMethod: HTTP method annotation is required (e.g., @GET, @POST, etc.).
或 java.lang.IllegalArgumentException: TwitchApi.someMethod: Must have either a return type or Callback as last argument.
被抛出。
有没有办法让改造忽略未使用任何 retrofit.http.GET / PUT / ...
注释的方法?
public trait SomeApi {
GET("/endpoint")
public fun getSomething(Query("user") user: String): Observable<SomeResponse>
class object {
public fun create(): SomeApi {
val restAdapter = RestAdapter.Builder().setEndpoint("http://localhost").build()
return restAdapter.create<TwitchApi>(javaClass<SomeApi >())
}
}
public fun someMethodThatBreaksRetrofit(user: String) : Int {
return processResponse(getSomething(user))
}
}
你根本不应该那样做。幸运的是,在 Kotlin 中你可以使用扩展函数,所以
interface SomeApi {
GET("/endpoint")
fun getSomething(Query("user") user: String): Observable<SomeResponse>
}
fun SomeApi.someMethod(user : String) : Observable<Int>
= processResponse(getSomething(user))
只要没有实施额外的方法,Traits 就可以很好地与 Retrofit 配合使用。根据 return 类型 RetrofitError: TwitchApi.someMethod: HTTP method annotation is required (e.g., @GET, @POST, etc.).
或 java.lang.IllegalArgumentException: TwitchApi.someMethod: Must have either a return type or Callback as last argument.
被抛出。
有没有办法让改造忽略未使用任何 retrofit.http.GET / PUT / ...
注释的方法?
public trait SomeApi {
GET("/endpoint")
public fun getSomething(Query("user") user: String): Observable<SomeResponse>
class object {
public fun create(): SomeApi {
val restAdapter = RestAdapter.Builder().setEndpoint("http://localhost").build()
return restAdapter.create<TwitchApi>(javaClass<SomeApi >())
}
}
public fun someMethodThatBreaksRetrofit(user: String) : Int {
return processResponse(getSomething(user))
}
}
你根本不应该那样做。幸运的是,在 Kotlin 中你可以使用扩展函数,所以
interface SomeApi {
GET("/endpoint")
fun getSomething(Query("user") user: String): Observable<SomeResponse>
}
fun SomeApi.someMethod(user : String) : Observable<Int>
= processResponse(getSomething(user))