【发布时间】:2018-08-23 08:34:47
【问题描述】:
我有这种情况: 有一个Java类
public class A {
public void overrideMe(B param){
//TODO: override me in Kotlin!
}
protected static class B {
}
}
还有一个 Kotlin 类,它继承自它并且必须覆盖方法“overrideMe”
class K: A() {
override fun overrideMe(param: B) {
println("Wow!")
}
}
但 Kotlin 不允许这种行为。
'public' 函数暴露了它的 'protected (in A)' 参数类型 B
有什么办法可以解决这个问题吗?
附:这不仅仅是一个综合案例 - 当我尝试实现自定义 Spring AmqpAppender 并覆盖它的 postProcessMessageBeforeSend 方法时,我遇到了这个问题。
【问题讨论】:
-
在 Java 中可以实现这一点让我感到非常惊讶。
-
B 被保护并且函数是公共的,错误是有道理的,不知道为什么Java 没有提前警告。
-
我认为这是我们生活在模拟中的权威证明
-
我认为您应该使用
internal关键字,正如我在回答中所述。这使您可以在模块中使用 B,但不能从外部访问它。 -
@leoderprofi 不幸的是,在我的例子中,有一个适当的 Spring AmqpAppender 类,用 java 编写。所以我没有“使用内部”选项
标签: java inheritance kotlin protected kotlin-interop