所以我有一个具有泛型类型的类
class GenericClass<T> {
// At some point in the class I have variable item of type T
val name: String = item.name
}
我确信GenericClass的类型T将与具有";name";所有物但当然,在排队时,我得到了一个";未解析的引用名称";。安卓工作室通过";创建扩展属性T.name";
private val <T> T.name: String
get() {}
我真的不知道得到后该放什么在括号里。我尝试了return name
,但得到了一个递归属性错误。
有什么想法吗?
感谢
如果您知道每个类型T都有属性name
,则可以隐式声明它:
// GenericClass.kt
class GenericClass<T : HasName> {
// At some point in the class I have variable item of type T
val name: String = item.name
}
// HasName.kt
// Create new interface with "name" property
interface HasName {
val name: String
}
但是,您还必须为所有可用作T.的类实现这个新接口
我确信GenericClass的类型T将与具有;name";所有物
然后需要显式声明。默认情况下,T
扩展Any?
。您需要通过声明一些接口(如(来缩小T
的可能类型
interface Named {
val name : String
}
并通过CCD_ 6作为通用参数。此外,您还需要生成所有类,并将其作为泛型参数传递,以实现该接口。顺便说一下,GenericClass<T : Named>
类本身可以声明为实现该接口:
class GenericClass<T : Named> : Named {
override val name: String = item.name
}