gpt4 book ai didi

android - 如何在类上使用 Kotlin 扩展函数?

转载 作者:行者123 更新时间:2023-12-02 11:08:40 26 4
gpt4 key购买 nike

我有一个关于扩展函数的非常简短的问题,这将有助于清除我的一些代码。基本上我对类名的 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
}

但这似乎不起作用。当我使用 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()

另一种在调用站点上不太详细的方法可能是像这样的泛型函数,其中 reified 关键字允许您访问用作泛型类型参数的具体类功能:

inline fun <reified T> transformName() {
val clazz: Class<*> = T::class.java
clazz.name.hashCode()
}

transformName<StateA>()

关于android - 如何在类上使用 Kotlin 扩展函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com