Kotlin摘要受保护的财产



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

abstract class Foo<out T : Bar>() {
  abstract protected val thing: T
}
class Baz : Foo<BarImpl> {
  override protected val thing: T = ...
}

我在Baz::thing上得到一个警告说:

冗余可见性修饰符

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

您将在Kotlin中收到IDE检查样式警告,例如您不需要的额外分号,已经可以推断出的额外泛型类型参数等等。您的冗余可见性修饰符也是这样。

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

此检查报告与元素的默认可见性匹配的可见性修饰符(对于大多数元素是public的,对于覆盖受保护成员的成员是protected的)。

如果你不再想看到它,你可以在IDE中关闭检查。

当重写祖先类的方法或成员时,您已经处于与声明时相同的访问级别。说protected是在陈述显而易见的(对于知道它是protected的编译器来说)。

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

最新更新