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

问题描述 投票:1回答:1

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

附:如果不可能,是否有任何模仿此行为的机制?

java generics inheritance kotlin
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.