Extend data class in Kotlin

后端 未结 8 1965
日久生厌
日久生厌 2020-11-28 04:31

Data classes seem to be the replacement to the old-fashioned POJOs in Java. It is quite expectable that these classes would allow for inheritance, but I can see no convenien

8条回答
  •  执笔经年
    2020-11-28 04:44

    Kotlin Traits can help.

    interface IBase {
        val prop:String
    }
    
    interface IDerived : IBase {
        val derived_prop:String
    }
    

    data classes

    data class Base(override val prop:String) : IBase
    
    data class Derived(override val derived_prop:String,
                       private val base:IBase) :  IDerived, IBase by base
    

    sample usage

    val b = Base("base")
    val d = Derived("derived", b)
    
    print(d.prop) //prints "base", accessing base class property
    print(d.derived_prop) //prints "derived"
    

    This approach can also be a workaround for inheritance issues with @Parcelize

    @Parcelize 
    data class Base(override val prop:Any) : IBase, Parcelable
    
    @Parcelize // works fine
    data class Derived(override val derived_prop:Any,
                       private val base:IBase) : IBase by base, IDerived, Parcelable
    

提交回复
热议问题