Почему функция расширения не видна в другом модуле? - PullRequest
0 голосов
/ 23 января 2020

Мой 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()
}

А в этом классе я могу использовать функцию расширения как это:

val str = ""
str.isEmailValid()

Но в модуле app у меня есть класс

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

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

Но теперь я получаю ошибку компиляции:

Неразрешенная ссылка: isEmailValid

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Если вы не укажете какой-либо модификатор видимости, по умолчанию используется publi c, что означает, что ваши объявления будут видны везде; ( Источник )

Поскольку вы не добавили модификатор видимости в isEmailValid, он рассматривается как public.

Обратите внимание, что функции расширения должны быть импортированы.

import com.your.package.path.isEmailValid
0 голосов
/ 23 января 2020

В вашем приложении build.gradle добавьте это:

implementation project(':common')
...