Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fun interface Observer<T> {
- fun onChange(t: T)
- }
- sealed class TaskState<out T> {
- class Initial<out T>(val d: T) : TaskState<T>()
- }
- class Container<T>(val t: T)
- class ViewModel {
- sealed class AvailableTask<out T> {
- object AvailableTask1 : AvailableTask<Boolean>()
- object AvailableTask2 : AvailableTask<Boolean>()
- }
- val taskState: Container<TaskState<Boolean>> = Container(TaskState.Initial(false))
- fun <T> foo(
- availableTask: AvailableTask<T>,
- obs: Observer<TaskState<T>>
- ) {
- val concreteTaskState = when (availableTask) {
- is AvailableTask.AvailableTask1 -> taskState
- is AvailableTask.AvailableTask2 -> taskState
- else -> taskState
- }
- /**
- * Lint error:
- * Required: TaskState<T>
- * Found: TaskState<Boolean>
- */
- obs.onChange(concreteTaskState.t)
- }
- }
- val v = ViewModel()
- v.foo(ViewModel.AvailableTask.AvailableTask1) { taskState: TaskState<Boolean> ->
- }
Advertisement
Add Comment
Please, Sign In to add comment