为什么扩展功能在另一个模块中不可见?
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 扩展中不可见?
来自 Swift 的 CGRect 和 CGSize 扩展在 Objective-C 中不可见