如何在 Kotlin 中实现抽象类

拉夫塔克

我是 Kotlin 的新手,我需要创建 2 个日期范围。一个显示在构造函数中创建的日期,另一个用默认日期修改结束日期,以防它为空或大于默认日期。为此,我曾想创建一个带有开始和结束日期的抽象类,然后创建 2 个数据类来实现这个抽象类,并将此业务规则放在其中一个中。这是我到目前为止的代码:

abstract class BaseLocalDateRange (
    open val startDate: LocalDate?,
    open val endDate: LocalDate?
    )

data class LocalDateRange(
    override val startDate: LocalDate?,
    override val endDate: LocalDate?
): BaseLocalDateRange(
    startDate,
    endDate
)

data class LocalDateRangeEndDate(
    override val startDate: LocalDate?,
    override val endDate: LocalDate?
): BaseLocalDateRange(
    startDate,
    if (endDate== null || endDate > LocalDate.of(2099, 12, 31)) LocalDate.of(2099, 12, 31) else endDate
)

我的问题是:

  • 这可以吗,或者有更好的方法来解决这个问题?
  • 我想在属性中使用“默认日期”并在此处使用它,但我真的不知道如何使用,所以如果有人知道如何处理这个问题,那就太好了。

谢谢!

纳奥·泰吉

不,您不需要覆盖 startDate 和 endDate

您可以在同伴处 DEFAULT_END_DATE

package org.example

import java.time.LocalDate

abstract class BaseLocalDateRange(
    protected val startDate: LocalDate?,
    protected val endDate: LocalDate?
){
    companion object{
        val DEFAULT_END_DATE: LocalDate = LocalDate.of(2099, 12, 31)
    }
}


class LocalDateRange(startDate: LocalDate?, endDate: LocalDate?) : BaseLocalDateRange(startDate, endDate)

class LocalDateRangeEndDate(startDate: LocalDate?, endDate: LocalDate?) : BaseLocalDateRange(
    startDate,
    if (endDate!=null && endDate > DEFAULT_END_DATE) DEFAULT_END_DATE else endDate
)


本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java的实现类中的抽象类内实现抽象类?

如何在Kotlin中创建抽象类的匿名类的实例?

如何在Go中实现抽象类?

如何在抽象类中实现扩展方法

如何在抽象类中实现依赖注入

如何在Kotlin中实例化一个抽象类?

Kotlin 具体类从抽象类和接口扩展而来,接口使用抽象类中实现的方法

Kotlin中的Singleton抽象类

在Kotlin中创建抽象类的实例

如何在Java中的抽象类中实现接口并扩展线程

如何实现泛型抽象类?

如何实现抽象类的方法?(Java)

如何在Python中为抽象类定义构造函数实现?

如何在Python中为抽象类定义构造函数实现?

如何在python中定义抽象类并强制实现变量

如何在实现导入接口的抽象类中调用方法?

如何在 Python 的抽象类实现中使用 self?

如何在多重继承上实现抽象类?

如何在python抽象类中创建抽象属性

如何在抽象类中调用非抽象方法?

如何找到所有使用C#中的反射实现通用抽象类的类?

在C#中,如何实现一个抽象类,该抽象类在函数中调用自身,例如Addable对象类?

C ++:如何在此抽象类的方法中返回抽象类

如何实现抽象类和继承类之间的交互?

如何强制实现抽象类的类声明其变量?

从Stream调用的close()方法如何指向AbstractPipeline抽象类中close()方法的实现?

从Stream调用的close()方法如何指向AbstractPipeline抽象类中close()方法的实现?

如何指定抽象类的具体实现的哪个版本在Spring中自动装配?

如何实现collection.abc。*模块中的哪个抽象类?