【问题标题】:How to pass optional parameter LocalTime in Kotlin如何在 Kotlin 中传递可选参数 LocalTime
【发布时间】:2021-01-24 14:08:39
【问题描述】:

我想在我的函数中传递一个使用 LocalTime 数据的可选参数。但是 LocalTime 只接受格式化的值。如何将空值或默认值传递给它?

data class OpeningHours(
        var startServiceHours: LocalTime,
        var finalServiceHours: LocalTime,
        var inconvenienceStartTime: LocalTime?,
        var inconvenienceFinalTime: LocalTime?
) {
    fun contains(time: LocalTime): Boolean {
        return if (startServiceHours.isAfter(finalServiceHours))
            (time.isAfter(startServiceHours) || time.isBefore(finalServiceHours)) &&
                    containsInconvenience(time)
        else
            (time.isAfter(startServiceHours) && time.isBefore(finalServiceHours)) &&
                    (time.isBefore(inconvenienceFinalTime) && time.isBefore(inconvenienceStartTime))
    }

    private fun containsInconvenience(time: LocalTime): Boolean {
        return if (inconvenienceFinalTime?.isAfter(inconvenienceStartTime)!!)
            time.isAfter(inconvenienceFinalTime) || time.isBefore(inconvenienceStartTime)
        else
            time.isAfter(inconvenienceFinalTime) && time.isBefore(inconvenienceStartTime)
    }
}

例如,我不能使用“00:00:00”默认值,因为我需要每个日期。必须是字面上的默认值。

【问题讨论】:

  • 您可以使用 (time: LocalTime?) 并在方法内部添加这一行:val currentTime = time ?: LocalTime(),然后使用 currentTime 代替 time
  • 如果您没有要传递的内容,您可以将参数设为默认值,例如 fun contains(time: LocalTime = LocalTime.MIN): Boolean。然后你可以在没有参数的情况下调用方法。

标签: android android-studio datetime kotlin localtime


【解决方案1】:

要将null传递给这个函数,只需在dataType上添加?,表示dataType可以为null,你可以根据需要传递null。 修改你的功能,如

 private fun containsInconvenience(time: LocalTime?): Boolean {
        return if (inconvenienceFinalTime?.isAfter(inconvenienceStartTime)!!)
            time.isAfter(inconvenienceFinalTime) || time.isBefore(inconvenienceStartTime)
        else
            time.isAfter(inconvenienceFinalTime) && time.isBefore(inconvenienceStartTime)
    }

【讨论】:

    【解决方案2】:

    一个可选参数可以通过直接在签名中定义传递给你的fun

    data class OpeningHours(
            var startServiceHours: LocalTime,
            var finalServiceHours: LocalTime,
            var inconvenienceStartTime: LocalTime?,
            var inconvenienceFinalTime: LocalTime?
    ) {
        // parameter defined with a default value here
        fun contains(time: LocalTime = LocalTime.MIN): Boolean {
            return if (startServiceHours.isAfter(finalServiceHours))
                (time.isAfter(startServiceHours) || time.isBefore(finalServiceHours)) &&
                        containsInconvenience(time)
            else
                (time.isAfter(startServiceHours) && time.isBefore(finalServiceHours)) &&
                        (time.isBefore(inconvenienceFinalTime) && time.isBefore(inconvenienceStartTime))
        }
        
        // parameter defined with a default value here
        private fun containsInconvenience(time: LocalTime = LocalTime.MIN): Boolean {
            return if (inconvenienceFinalTime?.isAfter(inconvenienceStartTime)!!)
                time.isAfter(inconvenienceFinalTime) || time.isBefore(inconvenienceStartTime)
            else
                time.isAfter(inconvenienceFinalTime) && time.isBefore(inconvenienceStartTime)
        }
    }
    

    LocalTime.MIN 等价于00:00:00.0,如果您不向fun 传递任何内容,将使用它,例如不带参数调用它:containsInconvenience()。但如果您将其设为containsInconvenience(time: LocalTime? = LocalTime.MIN),它不会取代null。你必须在体内照顾它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2011-09-23
      • 2012-06-05
      • 1970-01-01
      • 2016-01-19
      相关资源
      最近更新 更多