felislynx
04/18/2018, 12:58 PMopen class Foo {
}
class Bar:Foo(){
}
open class FooList {
open var list:List<Foo>?=null
}
class BarList:FooList(){
override var list:List<Bar>?=null
}
open class BaseTest {
open var llist:List<FooList>?=null
}
class BaseTestTwo : BaseTest {
override var llist:List<BarList>?=null
}
Andreas Sinz
04/18/2018, 1:00 PMBaseTestTwo
failing?felislynx
04/18/2018, 1:01 PMfelislynx
04/18/2018, 1:02 PMfelislynx
04/18/2018, 1:03 PMfelislynx
04/18/2018, 1:04 PMopen class FooList<T:Foo> {
open var list: List<T>? = null
}
class BarList : FooList<Bar>() {
override var list: List<Bar>? = null
}
Andreas Sinz
04/18/2018, 1:05 PMlist: List<T>?
is a var
and thus is reassignablefelislynx
04/18/2018, 1:07 PMfelislynx
04/18/2018, 1:09 PMAndreas Sinz
04/18/2018, 1:09 PMFooList<T: Foo>
is invariant, that means FooList<Bar>
is not a subtype of FooList<Foo>
felislynx
04/18/2018, 1:10 PMfelislynx
04/18/2018, 1:10 PMAndreas Sinz
04/18/2018, 1:10 PMval
and use FooList<out T: Foo>
felislynx
04/18/2018, 1:13 PMfelislynx
04/18/2018, 1:14 PMAndreas Sinz
04/18/2018, 1:16 PMAndreas Sinz
04/18/2018, 1:17 PMfelislynx
04/18/2018, 1:18 PMfelislynx
04/18/2018, 1:19 PMfelislynx
04/18/2018, 1:19 PMAndreas Sinz
04/18/2018, 1:20 PMfelislynx
04/18/2018, 1:21 PMfelislynx
04/18/2018, 1:22 PMfelislynx
04/18/2018, 1:22 PM