gpt4 book ai didi

java - Kotlin 将类型函数具体化为函数扩展 - 可从 Java 调用?

转载 作者:IT老高 更新时间:2023-10-28 13:47:29 45 4
gpt4 key购买 nike

我正在尝试使用具有 reified 类型的函数作为扩展函数,但我认为这是不可能的,因为在检查生成的字节码后,我发现方法签名是私有(private)的,任何解决方法都可以使其公开?

CommonExtensions.kt

inline fun<reified T: Activity> Context.startActivity() {
val intent = Intent(this, T:: class.java)
startActivity(intent)
}

fun View.visible() {
visibility = View.VISIBLE
}

Kotlin 字节码:

private final static startActivity(Landroid/content/Context;)V
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
...

客户代码:

Kotlin 文件

override fun showMessageEmptyOfferFeeds() {
mOfferFeedsWarning.visible() // "visible()" extension func RESOLVED
}

Java 文件

showProfileDetailsUi(){
startActivity<DetailActivity>() //"startActivity()" extension func NOT RESOLVED
}

最佳答案

是的,您可以使用带有 reified 类型的 inline 函数作为扩展函数。它被设置为 private 以便 Java 代码无法访问它(顺便说一句,这不是“正常” inline 函数的情况)。这样的 inline 函数对于 Kotlin 可以是 private 因为内联函数被复制where 它们被调用

example :

inline fun <reified T : Activity> Activity.startActivity() {
startActivity(Intent(this, T::class.java))
}

//usage

startActivity<DetailActivity>()

在另一个 SO 问题中阅读有关 reified 的更多信息,我回答:https://stackoverflow.com/a/45952201/8073652

再说一次:你不能使用 inline 函数和从 Java 输入的 reified

关于java - Kotlin 将类型函数具体化为函数扩展 - 可从 Java 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158513/

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