Eli*_*zer 11 properties abstract kotlin
如果我有以下类层次结构:
abstract class Foo<out T : Bar>() {
abstract protected val thing: T
}
class Baz : Foo<BarImpl> {
override protected val thing: T = ...
}
Run Code Online (Sandbox Code Playgroud)
我收到Baz :: thing的警告说:
冗余可见性修饰符
这是否意味着编译器将其视为受保护而不需要指定它,或者它必须是公共的?
您将在Kotlin中收到IDE检查样式警告,例如您不需要的额外分号,可以推断的额外泛型类型参数等等.您的冗余可见性修饰符沿着相同的路线.
如果展开检查消息,您将看到全文:
此检查报告可见性修饰符,其与元素的默认可见性匹配(对于大多数元素是公共的,对覆盖受保护成员的成员受到保护).
如果您不再查看它,您可以在IDE中关闭检查.
关于这个的一些注释:
覆盖祖先类的方法或成员时,您已经处于与声明它时相同的访问级别.说protected是显而易见的(对于知道它的编译器protected).
如果需要,您可以再次重新访问访问修饰符.你可以通过改变它来打开它public.但是你不能进一步限制它,例如转到private(因为如果它是私有的,你怎么能覆盖它,这个想法是不兼容的override),这会成为编译器错误.