Fabio
09/10/2020, 5:56 AMabstract class TodayDynamicModel<V : View> : BardeenListUiModel() {
fun asTodayDynamicModel() = this as TodayDynamicModel<View> // --> Unchecked cast: TodayDynamicModel<V> to TodayDynamicModel<View>
}
Isn't V
guaranteed to be of type View
?Kroppeb
09/10/2020, 9:19 AMTodayDynamicModel<out V:View>
Fabio
09/14/2020, 1:14 AMabstract class TodayDynamicModel<out V : View> : BardeenListUiModel() {
abstract fun bindView(view: V) // Type parameter V is declared as 'out' but occurs in 'in' position in type V
And if I do <in V: View>
I can't do abstract fun buildView(context: Context): V?
abstract class BardeenDynamicRecyclerViewModel<V : View> : BardeenListUiModel() {
abstract fun bindView(view: V?)
abstract fun buildView(context: Context): V?
@Suppress("UNCHECKED_CAST")
fun asTodayDynamicModel() = this as BardeenDynamicRecyclerViewModel<View>
fun buildAndBindView(context: Context): V? {
return buildView(context)
.also {
bindView(it)
}
}
}
out V:View
in fun asTodayDynamicModel() = this as BardeenDynamicRecyclerViewModel<out View>
and in a bunch of places that call asTodayDynamicModel
.