【问题标题】:Kotlin Abstract Protected PropertyKotlin 抽象受保护的财产
【发布时间】:2017-01-30 08:00:55
【问题描述】:

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

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

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

我收到关于 Baz::thing 的警告:

冗余可见性修饰符

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

【问题讨论】:

    标签: properties abstract kotlin


    【解决方案1】:

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

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

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

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

    关于此的更多说明:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 2019-02-14
      • 2013-02-05
      • 2012-06-15
      • 2020-09-09
      • 2015-08-02
      相关资源
      最近更新 更多