我说有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)中使用通用超类型吗?
附:如果不可能,是否有任何模仿此行为的机制?
我不认为你需要泛型,只是实现接口。
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