如何从Kotlin中的泛型继承接口?

时间:2019-04-07 10:08:04

标签: java generics inheritance kotlin

据说我有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)中使用通用超类型吗?

P.S。如果不可能,是否有任何机制可以模仿这种行为?

1 个答案:

答案 0 :(得分:0)

我认为您不需要泛型,只需实现接口即可。

interface IPerson { // "HasName"
    val name: String
}

interface IPoliceMan : IPerson { // "HasDepartmentName"
    val departmentName: String
}

open class Person(
    override val name: String
) : IPerson

class PoliceMan(
    override val departmentName: String, 
    name: String
) : Person(name), IPoliceMan
相关问题