У меня, как говорят, есть PersonImpl<Base : IPerson>
обобщенный класс, где IPerson
- это интерфейс Person.Я пытаюсь сделать это
interface IPerson {
fun getName(): String
}
interface IPoliceMan : IPerson {
fun getDepartmentName(): String
}
open class PersonImpl<T: IPerson>(private val name: String) : T
, а затем
class PoliceMan(private val departmentName: String, name: String) : PersonImpl<IPoliceMan>(name)
Поэтому я хочу, чтобы компилятор сказал, что мне нужно реализовать getDepartmentName()
в PoliceMan
, но это не таквозможно как Только классы и интерфейсы могут служить супертипами
Таким образом, единственный вариант подобен этому
class PoliceMan(private val departmentName: String, name: String) : IPoliceMan, PersonImpl<IPoliceMan>(name)
с дублированием интерфейса.
Могу ли я иметь общий супертип в Kotlin (или Java)?
PS Если это невозможно, есть ли механизм эмуляции этого поведения?