我正在扩展现有的 Java 类,它有一些私有方法。为了实现我想要的,我必须重写这个私有方法。
所以我读了一些关于 Java 反射的文章,并得出以下结论:
class CustomSlider : Slider() {
init {
Slider::class.java.getDeclaredMethod("drawTrack", Canvas::class.java, Int::class.java, Int::class.java).isAccessible = true
}
override fun drawTrack(canvas: Canvas, width: Int, top: Int) {
}
}
Run Code Online (Sandbox Code Playgroud)
但在线上override,我收到一条错误消息,表明这是不可能的。
那么我该怎么做呢?
无论是在 Kotlin 中还是在 Java 中,都不可能重写私有方法。
反思在这里没有帮助。私有方法是静态分派的,而不是动态的——也就是说,正确的实现是在编译时而不是运行时选择的。
也可以看看:
为了“实现你想要的”,你应该走另一条路——如果你使用的 API 预见到扩展,它可能会以这样或那样的方式提供这种扩展。
| 归档时间: |
|
| 查看次数: |
3543 次 |
| 最近记录: |