Kotlin将函数扩展的types函数 – 从Java中调用?

我试图使用具体化types作为扩展function的函数,但我不认为这是可能的,因为我检查生成的字节码后,我发现方法签名是私人的,任何解决方法,使其公开?

CommonExtensions.kt

inline fun 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() //"startActivity()" extension func NOT RESOLVED } 

是的,您可以使用inline函数作为扩展函数。 它是private所以Java代码不能访问它(顺便说一句,“正常” inline函数并不是这种情况)。 这样的inline函数可以是Kotlin private ,因为内联函数被复制到它们被调用的地方。

一个例子 :

 inline fun  Activity.startActivity() { startActivity(Intent(this, T::class.java)) } //usage startActivity() 

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

再一次: 您不能使用从Java输入的inline函数。

inline reified函数在编译之后会“消失”,因为在JVM上不存在指定types。 这是编译器的一个窍门。

私有函数的唯一原因可能是如果有人试图在运行时覆盖它,就会导致错误,因为该函数是完全内联的,不能被覆盖。