![](/img/trans.png)
[英]Can I hide a Java static method with a Kotlin companion object method?
[英]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.