Chu*_*ulo 5 java kotlin kotlin-android-extensions kotlin-reified-type-parameters
我正在尝试使用具有reified类型的函数作为扩展函数,但我不认为这是可能的,因为在我检查生成的字节码后我发现方法签名是私有的,是否有任何解决方法使其公开?
CommonExtensions.kt
inline fun<reified T: Activity> Context.startActivity() {
val intent = Intent(this, T:: class.java)
startActivity(intent)
}
fun View.visible() {
visibility = View.VISIBLE
}
Run Code Online (Sandbox Code Playgroud)
Kotlin字节码:
private final static startActivity(Landroid/content/Context;)V
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
...
Run Code Online (Sandbox Code Playgroud)
客户代码:
Kotlin文件
override fun showMessageEmptyOfferFeeds() {
mOfferFeedsWarning.visible() // "visible()" extension func RESOLVED
}
Run Code Online (Sandbox Code Playgroud)
Java文件
showProfileDetailsUi(){
startActivity<DetailActivity>() //"startActivity()" extension func NOT RESOLVED
}
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用inline带有reified类型的函数作为扩展函数.这样做是private为了让Java代码无法访问它(顺便说一句,这不是"普通" inline函数的情况).这样的inline函数可以是private对科特林因为内联函数复制的地方,其中它们被调用.
一个例子:
inline fun <reified T : Activity> Activity.startActivity() {
startActivity(Intent(this, T::class.java))
}
//usage
startActivity<DetailActivity>()
Run Code Online (Sandbox Code Playgroud)
reified在另一个SO问题中阅读更多信息,我回答:https://stackoverflow.com/a/45952201/8073652
再一次:您不能使用从Java键入的inline函数reified.
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |