Kotlin编译器:数据绑定错误,找不到方法。

7

我正在从 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来调用这个函数?

5
尝试在hideNumber上添加@JvmStatic - Lovis
1个回答

18

数据绑定编译器正在寻找一个静态方法。

由于仅使用命名的object并不足以使该对象内的所有方法都为static,因此您需要在hideNumber方法上添加额外的@JvmStatic注释:

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

参见:https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-methods


太酷了!感谢解释! - Sigmund
1
谢谢你,伙计。你救了我的一天!! - Abner Escócio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接