I'm trying to use a function with reified type as extension function but I don't think that it's possible because after I checked the generated bytecode I have find that the method signature is private, any work around to make it public ?
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 Bytecode :
private final static startActivity(Landroid/content/Context;)V
@Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0
...
Client Code :
Kotlin file
override fun showMessageEmptyOfferFeeds() {
mOfferFeedsWarning.visible() // "visible()" extension func RESOLVED
}
Java file
showProfileDetailsUi(){
startActivity<DetailActivity>() //"startActivity()" extension func NOT RESOLVED
}
Yes you can use
inline
functions withreified
types as extension functions. It's madeprivate
so that Java code can't access it (btw this is not the case for "normal"inline
functions). Such aninline
function can beprivate
for Kotlin because inline functions are copied to the place where they are invoked.An example:
Read more about
reified
in another SO question, I answered: https://stackoverflow.com/a/45952201/8073652Once again: You cannot use
inline
functions withreified
typed from Java.