class Foo1<out FOO>(val foo: FOO)
class Foo2<out FOO>(val foo: FOO) {
// не компилируется
// Type parameter FOO is declared as 'out'
// but occurs in 'in' position in type FOO
fun copy(_foo: FOO = foo): Foo2<FOO> = Foo2(_foo)
}
class Foo3<out FOO>(val foo: FOO)
// компилируется
fun <FOO> Foo3<FOO>.copy(_foo: FOO = foo): Foo3<FOO> = Foo3(_foo)
Собственно, вопрос: ограничение, из-за которого не компилируется, логично, но тогда почему два других варианта компилируются?
Третий так-то компилируется, потому что в функции FOO не тот же самый, что объявлен на уровне класса
Обсуждают сегодня