【发布时间】:2017-12-21 05:59:51
【问题描述】:
我想在使用 Kotlin 扩展功能时访问 Java 的私有字段。
假设我有一个 Java 类ABC。 ABC 只有一个私有字段mPrivateField。我想在 Kotlin 中编写一个扩展函数,它出于任何原因使用该字段。
public class ABC {
private int mPrivateField;
}
Kotlin 函数将是:
private fun ABC.testExtFunc() {
val canIAccess = this.mPrivateField;
}
我得到的错误是:
Cannot access 'mPrivateField': It is private in 'ABC'
有什么方法可以绕过这个限制?
【问题讨论】:
-
为什么需要访问 java private 字段?
-
它来自一个外部的、已编译的库,我想扩展它而不在我的项目中包含整个源代码。该库具有用于 Android 日历事件的“获取”方法,我想将“插入日历事件”功能添加到类中。
-
修改外部库的private字段是危险的。它可能会破坏您的应用程序。您可以使用 java reflection 更改字段值。
-
是的,我同意。但我只想得到那个字段。并像我扩展的类一样使用它的方法。这里没有真正的威胁......
标签: kotlin kotlin-extension kotlin-interop