在Kotlin中将空字符串转换为LocalDateTime时会发生什么
我有如下代码:在Kotlin中将空字符串转换为LocalDateTime时会发生什么,kotlin,Kotlin,我有如下代码: val logoutDt = history?.getBody() as? LocalDateTime 如果history?.getBody()的值是一个空字符串,logoutDt的值是多少?如果它是null,你将得到TypeCastException和as的null: kotlin.TypeCastException:null不能转换为非null类型java.time.LocalDate 如果它是一个“空字符串”,您将得到ClassCastException: java.la
val logoutDt = history?.getBody() as? LocalDateTime
如果
history?.getBody()
的值是一个空字符串,logoutDt的值是多少?如果它是null
,你将得到TypeCastException
和as
的null
:
kotlin.TypeCastException:null不能转换为非null类型java.time.LocalDate
如果它是一个“空字符串”,您将得到ClassCastException
:
java.lang.ClassCastException:java.lang.String不能转换为java.time.LocalDate
演员没有这样的作用
您需要使用更多的代码:
fun main() {
val formatter = DateTimeFormatter.ISO_DATE_TIME
val date = LocalDateTime.parse("2011-12-03T10:15:30", formatter)
println(date) // 2011-12-03T10:15:30
}
无论字符串是空的还是有一些内容,将其用as?
强制转换为LocalDateTime
将始终产生null
,而将强制转换为as
将始终导致ClassCastException
如果要从字符串中获取LocalDateTime
,则必须对其进行转换。您可以使用LocalDateTime.parse
static函数执行此操作:
val date: LocalDateTime? = history?.getBody()?.let { body -> LocalDateTime.parse(body) }
到目前为止你试过什么?首先,你试过了吗?第二,如果getBody()
返回String
,结果将是null
,因为String
不能强制转换为LocalDateTime
。我想你错过了as?
中的问号。在这两种情况下,logoudDt
的值都是null
,因为as?
是“安全的”cast@user2340612的确,谢谢。我已经编辑了我的答案。但是,它也不会产生LocalDateTime
。