如何从 Kotlin 中的不同模块访问内部成员?
How can I access the internal members from a different module in Kotlin?
在 Kotlin 中,将“内部”应用于 public class 的成员函数时,它仅在模块内部可见。
在有核心模块的情况下,另一个模块(称为外部模块)具有从核心模块中定义的 class 派生的 class。
核心模块
package com.core
class BaseClass {
internal fun method_internal() {...}
public fun method_public() {...}
}
在核心模块中,method_internal()
可以在BaseClass
之外访问。
在应用程序中,谁对核心模块有依赖,BaseClass
就可以在应用程序中使用,但在应用程序中是看不到内部的method_internal()
。这就是想要的 internal
行为。
在另一个模块(外部模块)中,它有一个 class 派生自 BaseClass
.
外部模块
package com.outermodule
class DerivedClass : BaseClass {
......
}
在外部模块中它可以使用来自 DerivedClass 的 method_public()
,但它不能访问 method_internal()
.
并且它不能将 method_internal
设为 protected
,因为它应该允许在核心模块的任何地方访问。
如何使该方法在一个模块中具有 internal
可见性,但至少能够从其他模块中的派生 classes 访问?
它不漂亮,但您可以创建两个函数。
open class BaseClass {
protected fun foo() {
println("foo!")
}
internal fun fooInternal() = foo()
}
在 Kotlin 中,将“内部”应用于 public class 的成员函数时,它仅在模块内部可见。
在有核心模块的情况下,另一个模块(称为外部模块)具有从核心模块中定义的 class 派生的 class。
核心模块
package com.core
class BaseClass {
internal fun method_internal() {...}
public fun method_public() {...}
}
在核心模块中,method_internal()
可以在BaseClass
之外访问。
在应用程序中,谁对核心模块有依赖,BaseClass
就可以在应用程序中使用,但在应用程序中是看不到内部的method_internal()
。这就是想要的 internal
行为。
在另一个模块(外部模块)中,它有一个 class 派生自 BaseClass
.
外部模块
package com.outermodule
class DerivedClass : BaseClass {
......
}
在外部模块中它可以使用来自 DerivedClass 的 method_public()
,但它不能访问 method_internal()
.
并且它不能将 method_internal
设为 protected
,因为它应该允许在核心模块的任何地方访问。
如何使该方法在一个模块中具有 internal
可见性,但至少能够从其他模块中的派生 classes 访问?
它不漂亮,但您可以创建两个函数。
open class BaseClass {
protected fun foo() {
println("foo!")
}
internal fun fooInternal() = foo()
}