检查条件中LocalDateTIme是否为空

问题描述 投票:0回答:3

这里有一个将字符串格式化为LocalDateTime并将其返回的函数。

val dateSentFormatted = timeFormatted(record.data.dateTime);
private fun timeFormatted(dateEmailSent: String?): LocalDateTime {
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd:HH:mm:ss");
    return LocalDateTime.parse(dateEmailSent, formatter);
}

我的问题是我希望在文件的其他位置对其运行if语句,以检查其是否为空,如:

if (!dateSentFormatted != null ) {

}

但是不喜欢这样,我还能如何检查if语句中LocalDateTime类型的变量是否为空?

java if-statement kotlin logic java-time
3个回答
0
投票

C0]类的[方法parse(CharSequence, DateTimeFormatter)不接受java.time.LocalDateTime作为字符序列(第一个参数),因此您必须进行显式的null检查并将函数的返回值重写为

null

(顺便说一下,您不必使用分号(return if (dateEmailSent != null) LocalDateTime.parse(dateEmailSent, formatter) else null ))

此外,编写的函数的返回类型不可为空,因此您必须将其更改为;

而且,如果在LocalDateTime?dateEmailSent的情况下不使用解析器/格式器,则没有必要创建解析器/格式器,我建议如下重写整个函数:

null

最后一部分取决于您,如果您想实现问题中描述的功能,其余部分几乎是必需的。


0
投票

假设fun timeFormatted(dateEmailSent: String?) = if (dateEmailSent != null) { LocalDateTime.parse(dateEmailSent, DateTimeFormatter.ofPattern("yyyy-MM-dd:HH:mm:ss")) } else null 是类型为dateSentFormatted的变量,您可以检查其是否为空:

LocalDateTime

您不需要第一个if (dateSentFormatted != null ) { // dateSentFormatted is not null }


0
投票

如所写,! 不能为空:您将其设置为从dateSentFormatted返回的值,该值返回一个timeFormatted(),该值不能为空。 (与LocalDateTime不同,它将是。)

并且因为您尚未指定其类型,所以编译器会推断LocalDateTime?(因此即使它是LocalDateTime,它也永远不会为空)。

因此,如前所述,检查null没有意义,您的IDE会警告您该检查毫无意义!

但是,如果它were可为空,则根据您想对它进行什么操作,可以使用各种选项进行空检查:

  • 根据您的代码的简单var测试(但没有多余的if (dateSentFormatted != null))。这是传统方式,有时仍然是最清晰的方式。

  • 其他!测试。 Kotlin的标准库提供了几种使空检查更简洁和/或更易读的方法,例如:]

    if ()
  • elvis运算符if (someString.isNullOrEmpty()) // … ,如果不为null,则产生其左侧,否则为右侧。如果未指定默认值/后备值,则此功能非常有用,例如:

    ?:

    这与:大致相同:

    ?:
  • 安全调用运算符someFunctionCall(dateSentFormatted ?: LocalDateTime.now()) ,仅当LHS不为null时才调用方法/获取器,否则它直接为null。当跟随对象链时,这很有用,例如:

    someFunctionCall(if (dateSentFormatted != null) dateSentFormatted else LocalDateTime.now())
    

    这与:大致相同:

    ?.

    ……如果同时更新任何这些对象,它将不会失败。

  • 非null断言运算符?.。如果确定此时该值不能为null,则此运算符告诉编译器您更了解。 (如果输入错误,则会出现运行时异常。)例如:

    val postcode = employee?.manager?.address?.postcode
    

    潜在的运行时错误意味着这很少是一个不错的选择(这就是为什么它们看起来很恐怖的原因。)>

  • 更复杂,取决于您要执行的操作...

© www.soinside.com 2019 - 2024. All rights reserved.