Guest User

Untitled

a guest
Jul 8th, 2021
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.04 KB | None | 0 0
  1. fun interface Observer<T> {
  2.     fun onChange(t: T)
  3. }
  4.  
  5. sealed class TaskState<out T> {
  6.     class Initial<out T>(val d: T) : TaskState<T>()
  7. }
  8.  
  9. class Container<T>(val t: T)
  10.  
  11. class ViewModel {
  12.     sealed class AvailableTask<out T> {
  13.         object AvailableTask1 : AvailableTask<Boolean>()
  14.         object AvailableTask2 : AvailableTask<Boolean>()
  15.     }
  16.  
  17.     val taskState: Container<TaskState<Boolean>> = Container(TaskState.Initial(false))
  18.  
  19.     fun <T> foo(
  20.         availableTask: AvailableTask<T>,
  21.         obs: Observer<TaskState<T>>
  22.     ) {
  23.         val concreteTaskState = when (availableTask) {
  24.             is AvailableTask.AvailableTask1 -> taskState
  25.             is AvailableTask.AvailableTask2 -> taskState
  26.             else -> taskState
  27.         }
  28.  
  29.         /**
  30.          * Lint error:
  31.          * Required: TaskState<T>
  32.          * Found: TaskState<Boolean>
  33.          */
  34.         obs.onChange(concreteTaskState.t)
  35.     }
  36. }
  37.  
  38. val v = ViewModel()
  39. v.foo(ViewModel.AvailableTask.AvailableTask1) { taskState: TaskState<Boolean> ->
  40.  
  41. }
Advertisement
Add Comment
Please, Sign In to add comment