Entertainer1<T: Entertainment> {
open fun <T> produce(): T = Entertainment()
}
С типами ведь всё хорошо
Так тоже нельзя
open class Entertainer1<T: Entertainment> {
open fun produce(): T? = Entertainment()
}
out нужен
В обоих случаях с типами всё плохо. В первом у функции есть собственный типовой параметр, про который функция ничего не знает. Ты её produce<SomeEntertainment>(), а она тебе какой-то Entertainment. Во втором можно унаследовать класс, передав произвольный T: class E : Entertainer1<SomeEnterrainment>(), а метод не переопределить, и тогда см. пункт «во-первых».
Обсуждают сегодня