繁体   English   中英

Java静态方法和Kotlin随播对象有什么区别? 为什么在Andorid数据绑定中出现错误?

[英]What is the difference between Java static method and Kotlin companion object ? Why it is giving error in Andorid Data Binding?

嗨,大家好,我有一个场景,我正在使用Android数据绑定。 我试图将一个小的util方法绑定到下面的视图

//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的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM