Kotlin摘要保护财产

时间:2016-09-21 21:59:34

标签: properties abstract kotlin

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

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

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

我收到Baz :: thing的警告:

  

冗余可见性修饰符

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

1 个答案:

答案 0 :(得分:7)

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

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

  

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

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

关于此的更多说明:

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

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