【问题标题】:How can I access the internal members from a different module in Kotlin?在 Kotlin 中如何从不同的模块访问内部成员
【发布时间】:2022-01-14 16:30:33
【问题描述】:

在 Kotlin 中,当对公共类的成员函数应用“内部”时,它只在模块内部可见。

如果有核心模块,另一个模块(称为外部模块),其类派生自核心模块中定义的类。

核心模块

package com.core

class BaseClass {
   internal fun method_internal() {...}
   public fun method_public() {...}
}

在核心模块中,method_internal()可以在BaseClass之外访问。

在app中,凡是依赖核心模块的,BaseClass都可以在app中使用,但在app中看不到内部的method_internal()。这就是想要的 internal 行为。

在另一个模块(外部模块)中,它具有派生自 BaseClass 的类

外部模块

package com.outermodule

class DerivedClass : BaseClass {
......
}

在外部模块中它可以使用来自 DerivedClass 的method_public(), 但无法访问method_internal()

并且不能将method_internal 设为protected,因为它应该允许在核心模块中的任何地方进行访问。

如何使方法在一个模块中具有internal可见性,但至少能够从另一个模块中的派生类访问?

【问题讨论】:

  • 您可以在基类public 中创建另一个方法,该方法接受一个键作为参数,以便运行method_internal

标签: kotlin visibility internals


【解决方案1】:

它不是很漂亮,但你可以创建两个函数。

open class BaseClass {
    protected fun foo() {
        println("foo!")
    }

    internal fun fooInternal() = foo()

}

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多