Android 参数的Kotlin中的通用通配符
我有一个用于监听api回调的抽象类,如下所示。ApiRs是每个API响应对象从中继承的父对象Android 参数的Kotlin中的通用通配符,android,kotlin,Android,Kotlin,我有一个用于监听api回调的抽象类,如下所示。ApiRs是每个API响应对象从中继承的父对象 abstract class ApiCallback<in T : ApiRs> { open fun onSucceed(apiRsModel: T) {} open fun onFailed(code: Int, message: String) { } } 参数类型ApiCallback?实际上我想像ApiCal
abstract class ApiCallback<in T : ApiRs> {
open fun onSucceed(apiRsModel: T) {}
open fun onFailed(code: Int,
message: String) {
}
}
参数类型
ApiCallback?
实际上我想像ApiCallback那样编写它,我知道您想要接受ApiCallback:ApiCallback。您可以这样声明函数:
fun <T: ApiRs> isNetworkAvailable(apiCallback: ApiCallback<T>?,
context: Context)
fun isNetworkAvailable(apiCallback:apiCallback?,
上下文:上下文)
ApiCallback
这将采用任何类型的apir
。当我使用ApiCallback
时,请参见星体投影不起作用,上面的警告将不会起作用show@NikolaDespotoski这是对的。每一个API扩展ApiRs都会被接受,但如果没有另一个强制转换,将只具有ApiRs类提供的功能。好的,我知道你们的意思,将ApiCallback?
更改为ApiCallback?
右侧?否。ApiCallback
与ApiCallback
相同,您需要设置类型的上限ApiCallback
谢谢!你的解决方案很有道理!
fun <T : ApiRs> isNetworkAvailable(apiCallback: ApiCallback<T>?,
context: Context): Boolean {
val connectivityManager = context
.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = connectivityManager.activeNetworkInfo
// device network unreachable
if (networkInfo == null
|| !networkInfo.isConnected) {
// callback with network error
callbackWithFailed(
apiCallback,
ApiError.API_ERROR_CODE_0,
context.getString(R.string.api_error_code_0))
return false
}
return true
}
fun <T: ApiRs> isNetworkAvailable(apiCallback: ApiCallback<T>?,
context: Context)