【问题标题】:Why extension function is not visible in another module?为什么扩展功能在另一个模块中不可见?
【发布时间】:2020-05-09 12:10:55
【问题描述】:

我的 Android 项目有两个模块:

app
common

settings.gradle 中:

rootProject.name='My project'
include ':app'
include ':common'

在我的 build.gradle 中:

implementation project(':common')

在通用包中,我有 StringUtil.kt 和下一个扩展功能:

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

this 类中,我可以使用这样的扩展功能:

val str = ""
str.isEmailValid()

但是在app 模块中我有课

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

  fun doClickRegistration(email: String?, password: String?, retypePassword: String?) {
        val str = ""
        str.isEmailValid()
    }
}

但现在我得到编译错误:

未解决的参考:isEmailValid

【问题讨论】:

    标签: android kotlin kotlin-extension


    【解决方案1】:

    如果你不指定任何可见性修饰符,默认使用public,这意味着你的声明将在任何地方可见; (Source)

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

    请注意,扩展功能必须导入。

    import com.your.package.path.isEmailValid
    

    【讨论】:

      【解决方案2】:

      在您的应用程序build.gradle 中添加:

      implementation project(':common')
      

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 1970-01-01
        • 2020-06-10
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多