<分区>
我知道 Kotlin 在继承数据类方面存在局限性。在浏览此 discussion 时我没有学到更多.
因为 Kotlin 中的数据类类似于 Java 中的 POJO。我们不应该在 Java POJO 类中也遵循继承吗?总结一下,是不是因为Kotlin的局限性,不允许我们继承数据类,或者是设计上的缺陷。
把它分解成一个更简单的问题。 Java中从POJO类继承是错误的吗?
<分区>
我知道 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
修饰符在此之上生成 equals
、hashCode
、toString
方法。它还添加了一些 Kotlin 特定的方法:componentN
方法用于 destructuring declarations , 和 copy
方法。
如果数据类相互继承,这些生成的方法,特别是上面提到的前三个方法,定义起来会很复杂。在 KEEP 中详细查看关于这个话题。另见 this和 this主题讨论。
关于Kotlin中数据类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49402358/