Kotlin 摘要受保护 属性

Kotlin Abstract Protected Property

如果我有以下 class 层次结构:

abstract class Foo<out T : Bar>() {
  abstract protected val thing: T
}

class Baz : Foo<BarImpl> {
  override protected val thing: T = ...
}

我在 Baz::thing 上收到警告说:

Redundant visibility modifier

这是否意味着编译器将其视为受保护的而不需要您指定,或者它必须是 public?

您将在 Kotlin 中收到 IDE 检查样式警告,例如不需要的额外分号、已经可以推断的额外泛型类型参数等。你的冗余可见性修改器是沿着相同的路线。

如果展开检查消息,您将看到全文:

This inspection reports visibility modifiers which match the default visibility of an element (public for most elements, protected for members that override a protected member).

如果您不想再看到什么,您可以在 IDE 中关闭检查。

关于此的更多说明:

覆盖祖先的方法或成员时 class 您已经处于与声明时相同的访问级别。说 protected 是显而易见的(编译器知道它是 protected)。

如果需要,您可以再次重申访问修饰符。您可以将其更改为 public,从而进一步打开它。但是你不能进一步限制它,例如转到 private(因为如果它是私有的你怎么能覆盖它,这个想法与 override 不兼容)这会成为编译器错误。