Kotlin protected 属性 无法在其他模块中访问

Kotlin protected property can not be accessed in other module

就在我以为自己明白了的时候,我遇到了以下问题。

我在另一个模块中有一个 base class(这里称为 base)

看起来是这样的:

open class BaseTest {
    companion object {
        lateinit var baseTest: BaseTest
    }
    protected open var someProperty: String? = "base"
}

我想设置 属性 并保护它,以便我在另一个模块中扩展的 class 可以访问它。

class Extended: BaseTest() {

    fun extendedCall() {
        BaseTest().someProperty = "extended"
        baseTest.someProperty = "extended"
    }
}

但是,无论是静态的还是直接的 属性 都无法访问,并指出以下错误:

Cannot access 'someProperty': it is protected in 'BaseTest'

但是自从 BaseTest() 的扩展固有特性以来,难道不应该可以访问它吗?我的意思是受保护的定义是“声明仅在其 class 及其子 classess 中可见”,所以我错过了什么?它甚至不能在同一个模块中工作,所以这不是原因。

我错过了什么?

我认为 protected 修饰符在 Kotlin 中的工作方式不同。

documentation 说:

The protected modifier is not available for top-level declarations.

但我同意它写得相当混乱。文档似乎更侧重于通过 this 关键字实现的 Outter/Inner class 关系。

    BaseTest().someProperty = "extended"

在这里你通过调用构造函数创建了一个新的 BaseTest 对象 BaseTest() 并且你不能访问 other BaseTest 对象的受保护属性。

    baseTest.someProperty = "extended"

静态 BaseTest 对象也是另一个对象,而不是扩展对象本身。

受到保护仅仅使做事成为可能

    someProperty = "extended"

或等价物

    this.someProperty = "extended"

即访问this对象的属性。