使用公共方法继承Java类,接受Kotlin中的受保护类

Nik*_*nov 8 java inheritance protected kotlin kotlin-interop

我有这种情况:有一个Java类

public class A {

    public void overrideMe(B param){
        //TODO: override me in Kotlin!
    }

    protected static class B {

    }
}
Run Code Online (Sandbox Code Playgroud)

还有一个Kotlin类,它继承自它并且必须覆盖方法"overrideMe"

class K: A() {
    override fun overrideMe(param: B) {
        println("Wow!")
    }
}
Run Code Online (Sandbox Code Playgroud)

但Kotlin不允许这种行为.

'public'函数公开其'protected(in A)'参数类型B.

有什么方法可以解决这个问题吗?

PS这不仅仅是一个合成案例 - 当我尝试实现自定义Spring AmqpAppender并覆盖它的postProcessMessageBeforeSend方法时,我遇到了这个问题.

Nik*_*nov 0

好吧,毕竟结论是:纯Kotlin中没有办法解决这种情况。

我希望 AmqpAppender.Event 能够在不久的将来公开。

即使 Java 允许这种行为,在公共方法中使用非公共参数对我来说似乎是一个糟糕的设计(对 Kotlin 的开发人员来说也是如此)。