Dav*_*ian 5 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
Run Code Online (Sandbox Code Playgroud)
进而
class PoliceMan(private val departmentName: String, name: String) : PersonImpl<IPoliceMan>(name)
Run Code Online (Sandbox Code Playgroud)
所以,我希望编译器说,我需要实现 getDepartmentName()
的PoliceMan
,但这是不可能的,因为只有类和接口可作为超类型
所以唯一的变种是这样的
class PoliceMan(private val departmentName: String, name: String) : IPoliceMan, PersonImpl<IPoliceMan>(name)
Run Code Online (Sandbox Code Playgroud)
与界面重复。
我可以在 Kotlin(或 Java)中有泛型超类型吗?
PS 如果不可能,是否有任何机制可以模拟这种行为?
我认为您不需要泛型,只需实现接口即可。
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
541 次 |
最近记录: |