为什么扩展功能在另一个模块中不可见?

a_s*_*ber 6 android kotlin kotlin-extension

我的Android项目有两个模块:

app
common
Run Code Online (Sandbox Code Playgroud)

settings.gradle中:

rootProject.name='My project'
include ':app'
include ':common'
Run Code Online (Sandbox Code Playgroud)

在我的 build.gradle 中:

implementation project(':common')
Run Code Online (Sandbox Code Playgroud)

在公共包中,我有StringUtil.kt和下一个扩展函数:

fun String.isEmailValid(): Boolean {
    return !TextUtils.isEmpty(this) && android.util.Patterns.EMAIL_ADDRESS.matcher(this).matches()
}
Run Code Online (Sandbox Code Playgroud)

这个类中我可以使用这样的扩展函数:

val str = ""
str.isEmailValid()
Run Code Online (Sandbox Code Playgroud)

但在app模块中我有课

class RegistrationViewModel(application: Application) : AndroidViewModel(application) {

  fun doClickRegistration(email: String?, password: String?, retypePassword: String?) {
        val str = ""
        str.isEmailValid()
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在我得到编译错误:

未解决的参考:isEmailValid

Wil*_*zel 7

如果您没有指定任何可见性修饰符,则默认使用 public,这意味着您的声明将在任何地方都可见;(来源

由于您没有添加任何可见性修饰符,因此isEmailValid它被视为public.

请注意,必须导入扩展函数。

import com.your.package.path.isEmailValid
Run Code Online (Sandbox Code Playgroud)