在我的 Android 项目中:
import retrofit2.Call
import retrofit2.Callback
fun getAdvertising(callback: Callback<List<Advertising>>) {
val call = tangoRestClient.advertising
executeAsync(call, callback)
}
private fun executeAsync(call: Call<*>, callback: Callback<*>) {
call.enqueue(callback) // compile error
}
但是我得到编译错误:
> Task :app:generateDebugSources
> Task :app:validateSigningDebug
> Task :transport:compileDebugKotlin FAILED
e: \TransportService.kt: (127, 14): Out-projected type 'Call<*>' prohibits the use of 'public abstract fun enqueue(p0: Callback<T!>!): Unit defined in retrofit2.Call'
FAILURE: Build failed with an exception.
最佳答案
是的,Call
和 Callback
的类型参数应该相同。您必须编写 executeAsync
函数,例如如下所示:
private fun <T> executeAsync(call: Call<T>, callback: Callback<T>) {
call.enqueue(callback) // no compile error
}
它将保证类型参数相同
关于android - 类型不匹配。必需 : Nothing Found: Callback<*>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57240983/