diesieben07
06/25/2018, 9:28 AMMutableList<Object> is a MutableList<in CharSequence> because you can put any CharSequence into a list of objects.paulex
06/25/2018, 10:31 AMdiesieben07
06/25/2018, 10:38 AMval cannot be reassigned: Both are not correct.paulex
06/25/2018, 10:43 AMopen class Animal{
    private var id:Int = 0
}
data class Cat(
    private var name:String = ""
):Animal()
interface ViewInterface<in T:Animal> {
    fun setAnimal(animal:T)
}
fun main(args:Array<String>){
    
    var x:ViewInterface<Cat> = object:ViewInterface<Cat>{
        override fun setAnimal(s:Cat){
			println("Cat was set")
        } 
    }
    var y:ViewInterface<Animal> = object:ViewInterface<Animal>{
        override fun setAnimal(s:Animal){
			println("Animal was set")
        } 
    }
        
//     x.setAnimal(Animal())
    
    x = y //*This works*
//     y = x //This doesnt
    
//     x.setAnimal(Animal())
    
}diesieben07
06/25/2018, 10:45 AMx is of type ViewInterface<Cat>. Since ViewInterface uses declaration-site variance, this is really ViewInterface<in Cat> and ViewInterface<Animal> is assignable to that.diesieben07
06/25/2018, 10:46 AMAnimal (your y) it can also take in a Cat.diesieben07
06/25/2018, 10:47 AMViewInterface<in Cat> means "anything that can take a Cat". And your y fits that, it can even take any animal, which includes cats.paulex
06/25/2018, 10:54 AMy = x // fail
y is animal
and i would expect  that it to take take a cat x
however if it was covariant
y = x is acceptable
i know im missing a point buh i'm hoping to get itdiesieben07
06/25/2018, 10:54 AMy is ViewInterface<in Animal>, i.e. "i can take animals". But x can only take cats, not any animal.paulex
06/25/2018, 12:43 PM