gpt4 book ai didi

Kotlin 扩展函数访问 Java 私有(private)字段

转载 作者:IT老高 更新时间:2023-10-28 13:30:37 26 4
gpt4 key购买 nike

我想在使用 Kotlin 扩展功能时访问 Java 的私有(private)字段

假设我有一个 JavaABCABC 只有一个私有(private)字段mPrivateField。我想在 Kotlin 中编写一个扩展函数,它出于任何原因使用该字段。

public class ABC {
private int mPrivateField;

}

Kotlin 函数将是:

private fun ABC.testExtFunc() {
val canIAccess = this.mPrivateField;
}

我得到的错误是:

无法访问“mPrivateField”:它在“ABC”中是私有(private)的

有什么方法可以绕过这个限制?

最佳答案

首先,您需要获得 Field并启用它可以在 Kotlin 中可访问,例如:

val field = ABC::class.java.getDeclaredField("mPrivateField")

field.isAccessible = true

然后,您可以通过 Field#getInt 将字段值读取为 Int来自声明类的实例,例如:

val it: ABC = TODO()

val value = field.getInt(it)

最后,你的扩展方法如下:

private inline fun ABC.testExtFunc():Int {
return javaClass.getDeclaredField("mPrivateField").let {
it.isAccessible = true
val value = it.getInt(this)
//todo
return@let value;
}
}

关于Kotlin 扩展函数访问 Java 私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131683/

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