M'a*_*der 3 android class function kotlin extension-function
我有一个关于扩展功能的简短问题,该功能可以帮助清除一些代码。基本上,我对类名的hashCode进行了一些转换,并且我希望扩展函数执行这些转换。
例:
获得名称hashCode:StateA::class.java.name.hashCode()其中StateA是一个简单的类。
我想要扩展功能,如:
fun Class<*>.transformName(): String {
var hashString = this.javaClass.name.hashCode()
//Do my stuff on that hashString
return hashString
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。当我使用扩展功能时StateA.transformName(),该功能给我未解析的引用带来了错误。
我尝试了各种操作,例如将函数应用于StateA::class或使hashString等于,this::class.java.name.hashCode()但无济于事。有小费吗?
您不能真正实现StateA.transformName()语法,因为仅靠语法StateA本身就指向该类内的伴随对象。因此,要获取该语法,您需要在每个要使用此扩展程序的类中都有一个伴随对象。
您可以以一种非常通用的方式来做,首先获取KClass描述您的课程的。这为您提供了一个对象(KClass实例),您可以在其上调用扩展:
fun KClass<*>.transformName() {
val clazz: Class<*> = this.java
clazz.name.hashCode()
}
StateA::class.transformName()
Run Code Online (Sandbox Code Playgroud)
另一个方法(在调用站点上不太繁琐)可以是这样的通用函数,其中的reified关键字允许您访问用作函数内部通用类型参数的具体类:
inline fun <reified T> transformName() {
val clazz: Class<*> = T::class.java
clazz.name.hashCode()
}
transformName<StateA>()
Run Code Online (Sandbox Code Playgroud)