我正在扩展具有某些私有方法的现有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) {
}
}
但是在override
行,我收到一个错误消息,那就是不可能。
那我该怎么做?
答案 0 :(得分:4)
无论是在Kotlin还是Java中,都不可能不能覆盖私有方法。
反射在这里没有帮助。私有方法是静态分配的,而不是动态分配的-也就是说,在编译时而非运行时选择正确的实现。
另请参阅:
要“实现您想要的”,您应该走另一条路-如果您使用的API预见到扩展,它可能会以一种或另一种方式提供扩展。
答案 1 :(得分:1)
我认为您需要将“私有”更改为“受保护”。 内部可以使用私有方法,而该类及其子级可以使用受保护的方法。