If I’d like to access Java’s private field when using Kotlin extension function.
Suppose I have a Java class ABC
. ABC
has only one private field mPrivateField
. I’d like to write an extension function in Kotlin which uses that field for whatever reason.
public class ABC {private int mPrivateField;}
the Kotlin function would be:
private fun ABC.testExtFunc() {val canIAccess = this.mPrivateField;}
the error I’m getting is:
Cannot access 'mPrivateField': It is private in 'ABC'
First of all we will pick a Field from Java class then we will enable that field to make it accessible from Kotlin code.
val field = ABC::class.java.getDeclaredField("mPrivateField")field.isAccessible = true
Now we can read field value as Int using Field#getInt
function from instance of our ABC
class (declaring class).
val it: ABC = TODO()val value = field.getInt(it)
Now our extension method in Kotlin will look like this:
private inline fun ABC.testExtFunc():Int {return javaClass.getDeclaredField("mPrivateField").let {it.isAccessible = trueval value = it.getInt(this)//todoreturn@let value;}}
Quick Links
Legal Stuff
Social Media