У меня when
на seal class
, где я использую, чтобы проверить, относится ли он к определенному классу, я буду использовать данные. Он имеет общий T
, как показано ниже.
sealed class State
object Empty : State()
class Load<T>(val presentable: Presentable<T>) : State()
class Data<T>(val presentable: Presentable<T>) : State()
class LoadableContentController<T>(
private val presenter: LoadableContentPresenter<T>) {
private var state: State = Empty
fun present(content: Presentable<T>?) {
this.state = if (content == null) {
Empty
} else {
Data(content)
}
this.performSideEffects()
}
private fun performSideEffects() {
when (this.state) {
is Data<*> -> {
presenter.present((state as Data<T>).presentable)
}
is Load<*> -> {
presenter.present((state as Load<T>).presentable)
}
}
}
}
interface LoadableContentPresenter<T> {
fun present(presentable: Presentable<T>)
}
interface Presentable<T> {
val TAG: String
fun createView(): () -> T
}
Код работает. Однако это жалобы Unchecked cast: State to Load<T>
на ниже.
presenter.present((state as Load<T>).presentable)
Есть ли способ предотвратить предупреждение или сделать автоматическое приведение (поэтому мне не нужно его разыгрывать)?