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