Компилятор Kotlin: ошибка привязки данных, не удается найти метод - PullRequest
0 голосов
/ 24 мая 2018

Отражение от Java до Kotlin Я пытаюсь использовать статическую функцию с Data Binding:

  <data>
    <import type="com.package.domain.tools.helper.StringValidator"/>
    ...
</data>

Затем я вызываю функцию hideNumber:

 <com.hastee.pay.ui.view.Text
        ...
        android:text='@{StringValidator.hideNumber(account.number)}'
        app:layout_constraintRight_toRightOf="@+id/number"
        app:layout_constraintTop_toBottomOf="@+id/number" />

ИспользованиеПривязка данных здесь приводит к ошибке:

   [kapt] An exception occurred: 
android.databinding.tool.util.LoggedErrorException: Found data binding 
errors.
 ****/ data binding error ****msg:cannot find method 
 hideNumber(java.lang.String) in class 
 com.package.domain.tools.helper.StringValidator....

Вот этот объект:

 object StringValidator {
  ...
fun hideNumber(number: String): String {
    return "****" + number.substring(number.length - 4)
}
}

Как мне достичь этой функции, используя Kotlin и Data Binding?

1 Ответ

0 голосов
/ 24 мая 2018

Компилятор привязки данных ищет статический метод.

Поскольку одного только названного object недостаточно для создания всех методов внутри этого объекта static, требуется дополнительная аннотация @JvmStatic для вашего hideNumber -метода:

@JvmStatic
fun hideNumber(number: String): String {
    return "****" + number.substring(number.length - 4)
}

см. Также: https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-methods

...