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

Java 如何从Kotlin中的泛型继承接口?,java,generics,inheritance,kotlin,Java,Generics,Inheritance,Kotlin,据说我有PersonImpl泛型类,其中IPerson是Person的接口。 我正试着这么做 interface IPerson { fun getName(): String } interface IPoliceMan : IPerson { fun getDepartmentName(): String } open class PersonImpl<T: IPerson>(private val name: String) : T 与接口重复 我可以在K

据说我有
PersonImpl
泛型类,其中
IPerson
是Person的接口。 我正试着这么做

interface IPerson {
    fun getName(): String
}

interface IPoliceMan : IPerson {
    fun getDepartmentName(): String
}

open class PersonImpl<T: IPerson>(private val name: String) : T
与接口重复

我可以在Kotlin(或Java)中使用泛型超类型吗?


另外,如果不可能,是否有任何机制可以模拟这种行为?

我认为这不需要泛型,只需要实现接口

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

强迫类实现方法不是泛型的目的,这是扩展抽象类和/或实现接口的目的。是的,显然这是一个明显的变体,但是我说要像它所讨论的那样实现(任务是基于C++的,在那里可以从模板继承)。我不认为你能在科特林做到这一点。我同意你不能在科特林做到这一点。在C++中(我理解),泛型是用模板实现的,所以每个实例化都可以有不同的超类。而在Kotlin(和Java)中,泛型是使用类型擦除实现的;就运行时而言,只有一个类,因此它只能有一个超类。
class PoliceMan(private val departmentName: String, name: String) : IPoliceMan, PersonImpl<IPoliceMan>(name)
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