Java 静态方法和 Kotlin 配套对象有什么区别?为什么它在Andorid数据绑定中给出错误



嗨,伙计们,我有一个场景,我正在使用Android数据绑定。我正在尝试将一个小的实用程序绑定到波纹管视图

//Java Code
    public class Util {
            public static String capitalize(String text) {
                return text.toUpperCase();
            }
    }

和 XML 布局代码作为下面

//layout.xml--Android
    <data>
        <import type="com.lkb.baseandroidproject.Util"/>
    </data>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{Util.capitalize(user.name)}"/>

它很好,但是当我将 Java 类转换为 kotlin 时

class Util {
    companion object {
        fun capitalize(text:String): String {
            return text.toUpperCase()
        }
    }
}

 <TextView  android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="@{Util.Companion.capitalize(user.name)}"/>

它给出了错误

[kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:cannot find method capitalize(java.lang.String) in class com.lkb.baseandroidproject.Util.Companion file:/Users/leo/code/Android/Android_projects/Android_projects/BaseAndroidProject/app/src/main/res/layout/content_main.xml loc:23:32 - 23:68 **** data binding error ****
    at android.databinding.tool.processing.Scope.assertNoError(Scope.java:112)
    at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:109)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:73)
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:99)

Kotlin 代码生成的字节码如下 (Kotlin 1.3):

public final class com/example/testapp/Util$Companion {
  // access flags 0x11
  public final capitalize(Ljava/lang/String;)Ljava/lang/String;

如您所见,正在创建一个内部类Companion,它实际上具有方法capitalize

最新更新