Kotlin中数据类的继承

标签 inheritance kotlin pojo data-class

<分区>

我知道 Kotlin 在继承数据类方面存在局限性。在浏览此 discussion 时我没有学到更多.

因为 Kotlin 中的数据类类似于 Java 中的 POJO。我们不应该在 Java POJO 类中也遵循继承吗?总结一下,是不是因为Kotlin的局限性,不允许我们继承数据类,或者是设计上的缺陷。

把它分解成一个更简单的问题。 Java中从POJO类继承是错误的吗?

最佳答案

data class 不等同于 POJO,它的作用不止于此,这就是它的继承受到限制的原因。

以一个简单的 POJO 为例:

public class User {

    private String name;
    private int age;

    public String getName() { return name; }
    public int getAge() { return age; }

    public void setName(final String name) { this.name = name; }
    public void setAge(final int age) { this.age = age; }

    public User(final String name, final int age) {
        this.name = name;
        this.age = age;
    }

}

这在 Kotlin 中的等价物不是数据类,而只是像这样的简单类:

class User(var name: String, var age: Int)

这将创建两个可变属性(字段,加上 getter 和 setter)和构造函数。这已经等同于上面的 POJO。

什么添加了 data修饰符在此之上生成 equalshashCodetoString 方法。它还添加了一些 Kotlin 特定的方法:componentN 方法用于 destructuring declarations , 和 copy 方法。

如果数据类相互继承,这些生成的方法,特别是上面提到的前三个方法,定义起来会很复杂。在 KEEP 中详细查看关于这个话题。另见 thisthis主题讨论。

关于Kotlin中数据类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49402358/

相关文章:

postgresql - 在继承的表上使用触发器来替换外键

java - 接口(interface)和继承如何影响Java中类和对象之间的关系?

java - 程序中的子类出了什么问题?

c++ - 多级继承 C++

kotlin - 如何使用 MockK 在 android 测试中模拟私有(private)函数?

kotlin - 运行Java -jar时的Dropwizard Kotlin “Main method is not static in class”

kotlin - 如何使用 Koin 创建具有运行时依赖项的实例?

Java POJO 与 CSV 之间的转换,使用字段名称作为列标题

jackson - 如何使用 Jackson 将带有重复 XML 标签的 XML 解析为 POJO?

java - 无法使用 POJO 类获取 token 并保存到字符串中