我正在覆盖父类中的一个函数,它接受Any类型的参数。我想要任何?要成为Venue类型的实例,以便我可以提取它的id,但是,我无法使用getModelId(model: Venue?)
覆盖该函数,因为这不是它在超类中的定义方式。确保在这个用例中模型的类实例是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
}
}
但我不确定这是最好的方式
答案 0 :(得分:1)
如果传递的null
不是model
的实例,可以返回Venue
,那么您只需使用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
或者回退到if
或when
语句,其中涉及smart cast:
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
}
答案 1 :(得分:1)
您可以setting...compiler
通用:
ParentClass