我正在重写父类中的一个函数,该函数接受 Any 类型的参数?我要任何?成为 Venue 类型的一个实例,这样我就可以提取它的 ID,但是,我无法使用 getModelId(model: Venue?)
覆盖该函数,因为这不是它在 super 中的定义方式类(class)。什么是确保对于此用例模型的类实例是 Venue?
并且我可以提取其中我想要的数据的最佳方法是什么?
open class VenueAdapter: ParentClass() {
override fun getModelId(model: Any?): Any? {
//here I want to be able to pull the id out of the Venue class instance
return model.id
}
abstract class ParentClass {
//I've also tried defining it with a type parameter fun <M : Any?> getModelId(model: M) but that hasnt' worked.
abstract fun getModelId(model: Any?) : Any?
}
data class Venue (id: String)
我也考虑过
override fun getModelId(model: Any?): Any? {
when (model) {
is Venue -> return model.id
}
}
但我不确定这是最好的方法
最佳答案
如果传递的 model
不是 Venue
的实例,返回 null
是可以的,那么你可以只使用 safe cast 和一个 safe call 就像:
override fun getModelId(model: Any?): Any? = (model as? Venue)?.id
否则,要么在 Elvis operator ?:
之后添加默认值,如下所示:
override fun getModelId(model: Any?): Any? = (model as? Venue)?.id ?: defaultId
或者退回到将涉及 smart cast 的 if
或 when
语句:
override fun getModelId(model: Any?): Any? =
if (model is Venue)
model.id else
defaultId
override fun getModelId(model: Any?): Any? =
when (model) {
is Venue -> model.id
else -> defaultId
}
关于android - 传入参数时 Kotlin 类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47081288/