Extend data class in Kotlin

后端 未结 8 1959
日久生厌
日久生厌 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 05:03

    Above solution using abstract class actually generates corresponding class and let the data class extends from it.

    If you don't prefer abstract class, how about using an interface?

    Interface in Kotlin can have properties as shown in this this article..

    interface History {
        val date: LocalDateTime
        val name: String
        val value: Int
    }
    
    data class FixedHistory(override val date: LocalDateTime,
                            override val name: String,
                            override val value: Int,
                            val fixedEvent: String) : History
    

    I was curious how Kotlin compile this. Here's equivalent Java code (generated using the Intellij [Kotlin bytecode] feature):

    public interface History {
       @NotNull
       LocalDateTime getDate();
    
       @NotNull
       String getName();
    
       int getValue();
    }
    
    public final class FixedHistory implements History {
       @NotNull
       private final LocalDateTime date;
       @NotNull
       private final String name;
       private int value;
       @NotNull
       private final String fixedEvent;
    
       // Boring getters/setters as usual..
       // copy(), toString(), equals(), hashCode(), ...
    }
    

    As you can see, it works exactly like a normal data class!

提交回复
热议问题