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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么扩展功能在另一个模块中不可见?相关的知识,希望对你有一定的参考价值。

android项目中,我有两个模块:

app

common

在settings.gradle中:

rootProject.name='My project'
include ':app'
include ':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()
    


但是现在我得到了编译错误:

Unresolved reference: isEmailValid
答案

如果未指定任何可见性修饰符,则默认情况下使用public,这意味着您的声明将在任何地方都可见; (Source

由于未在isEmailValid中添加任何可见性修饰符,因此将其视为public

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

import com.your.package.path.isEmailValid
另一答案

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

implementation project(':common')

以上是关于为什么扩展功能在另一个模块中不可见?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 jupyter 内核在 vs code jupyter 扩展中不可见?

节点模块在我的 VSTS 的 Git 项目中不可见

从模块中导出的角度组件在另一个模块中不可用

来自 Swift 的 CGRect 和 CGSize 扩展在 Objective-C 中不可见

来自 Swift 的 CGRect 和 CGSize 扩展在 Objective-C 中不可见

Apple 文件应用程序“重命名”文件/文件夹功能在文件提供程序扩展中不起作用