Inheritance Kotlin中数据类的继承
我知道Kotlin在从数据类继承方面存在限制。在经历这些的过程中,我没有学到更多 Kotlin中的As数据类类似于Java中的POJO。我们是否也应该遵循Java POJO类中的继承?总而言之,是因为Kotlin中的限制,我们不允许从数据类继承,还是因为这样做在设计中存在缺陷Inheritance Kotlin中数据类的继承,inheritance,kotlin,pojo,data-class,Inheritance,Kotlin,Pojo,Data Class,我知道Kotlin在从数据类继承方面存在限制。在经历这些的过程中,我没有学到更多 Kotlin中的As数据类类似于Java中的POJO。我们是否也应该遵循Java POJO类中的继承?总而言之,是因为Kotlin中的限制,我们不允许从数据类继承,还是因为这样做在设计中存在缺陷 把它分解成一个更简单的问题。在Java中从POJO类继承错误吗?在Kotlin中,您不能从数据类继承,因为编译器没有合理的方法来生成自动为数据类提供的所有方法 在Java中,没有编译器生成的方法实现,例如equals、ha
把它分解成一个更简单的问题。在Java中从POJO类继承错误吗?在Kotlin中,您不能从数据类继承,因为编译器没有合理的方法来生成自动为数据类提供的所有方法
在Java中,没有编译器生成的方法实现,例如
equals
、hashCode
和toString
,您可以自由地以最适合您的方式实现它们。因此,没有理由认为从POJO继承是错误的。在Kotlin中,您不能从数据类继承,因为编译器没有合理的方法来生成自动为数据类提供的所有方法
在Java中,没有编译器生成的方法实现,例如
equals
、hashCode
和toString
,您可以自由地以最适合您的方式实现它们。因此,没有理由认为从POJO继承是错误的。a数据类
不是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
在此基础上添加修饰符所做的是生成equals
,hashCode
,toString
方法。它还添加了一些特定于Kotlin的方法:componentN
方法,以及copy
方法
这些生成的方法,特别是上面提到的前三种方法,在定义数据类是否相互继承时变得复杂。有关此主题的详细信息,请参见“关于此主题”。另请参见与此主题相关的讨论。数据类不是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
在此基础上添加修饰符所做的是生成equals
,hashCode
,toString
方法。它还添加了一些特定于Kotlin的方法:componentN
方法,以及copy
方法
这些生成的方法,特别是上面提到的前三种方法,在定义数据类是否相互继承时变得复杂。有关此主题的详细信息,请参见“关于此主题”。另请参阅与本主题相关的讨论。如果我们不希望Kotlin编译器生成getter/setter方法(例如带有公共字段的Pojo),该怎么办?您可以使用注释对每个属性进行注释。不会更改语法以访问Kotlin中的属性,但您可以直接访问字段,而不是Java中的getter/setter。如果我们不希望Kotlin编译器生成getter/setter方法(例如带有公共字段的Pojo),您可以使用注释来注释每个属性。不会更改语法以访问Kotlin中的属性,但是您可以直接访问字段,而不是Java中的getter/setter。