在Kotlin中获取参数化类型的参数



所以我有一个具有泛型类型的类

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
}

最新更新