Kotlin:Java利用日期到数据绑定的字符串

我想通过Databinding在视图中使用我的Data类的Date值。 如果我使用日期字段上的toString()方法,它将起作用。 但是我想自定义日期值。 所以我用Method创建了Utils对象。 这是Util对象

object DateUtils { fun toSimpleString(date: Date) : String { val format = SimpleDateFormat("dd/MM/yyy") return format.format(date) } } 

但是如果我想在这样的xml中使用这个方法

     ... android:text="@{DateUtils.toSimpleString(journey.date)}" 

我得到一个错误cannot find method toSimpleString(java.util.Date) in class ...

这是我的Dataclass:

 data class Journey(var title: String, var date: Date?, var destination: String) 

这个代码有什么问题?

3 Solutions collect form web for “Kotlin:Java利用日期到数据绑定的字符串”

使用kotlin中的保留字对象 ,你真的在​​做的是声明一个实例。 在Java中的等价物是或多或少的东西:

 class DataUtils { static DataUtils INSTANCE; public String toSimpleString()... } 

那么当你调用它你做一个DateUtils.INSTANCE.toSimpleString()

你应该能够在你的xml中使用DateUtils.INSTANCE.toSimpleString()


为了使toSimpleString可以从静态上下文访问,你必须用@JvmStatic标记该方法

 object DateUtils { @JvmStatic fun toSimpleString(date: Date) : String { val format = SimpleDateFormat("dd/MM/yyy") return format.format(date) } } 

使用扩展function ( doc )

 @file:JvmName("DateUtils")//Use this to change your class name in java, by default is Kt (DateUtilsKt in your case) fun Date.toSimpleString() : String { val format = SimpleDateFormat("dd/MM/yyy") return format.format(this) } 

那么你可以直接在xml中使用它,就像你已经在做的那样:

 android:text="@{DateUtils.toSimpleString(journey.date)}" 

你为什么不使用一个默认为静态的顶层函数呢? 顶级函数没有在任何类中定义。

 fun main(args: Array){ println(toSimpleString(Date())) } fun toSimpleString(date: Date?) = with(date ?: Date()) { SimpleDateFormat("dd/MM/yyy").format(this) } 

另外,注意在你的例子中Jouney的日期是可以空的,你的toSimpleString只接受一个不可空的Date!

我改变了它,以便在传递null时返回当前日期的字符串。

函数toSimpleString必须是静态的,所以:

 object DateUtils { companion object { fun toSimpleString(date: Date) : String { val format = SimpleDateFormat("dd/MM/yyy") return format.format(date) } } } 
  • Android WebView - JWT身份validation
  • 如何在Kotlin中使用get()定义类的types属性
  • 为什么我不能指定我的Kotlin文件在Android Studio中的位置?
  • 一次性将整个android项目移植到kotlin是否安全?
  • 如何在RxJava2中错误地终止开关图的序列
  • Android Rx-java + Kotlin的Retrofit2错误
  • 如何在Kotlin中的导航抽屉活动中添加OnFragmentInteractionListener?
  • 匕首与Kotlin上的Mvp - Android
  • 未解决的参考:Kotlin中的findViewById
  • 当listview刷新时,从第一行开始(Kotlin)
  • 未能在新的Android Kotlin项目上运行Instrumented测试
  • Kotlin language will be the best programming language for Android.