Din*_*ngh 0 inheritance pojo kotlin data-class
我知道Kotlin从数据类继承有一些限制.在进行这次讨论时,我学到了更多.
因为Kotlin中的数据类与Java中的POJO类似.我们是否应该不遵循Java POJO类中的继承?总结一下,是不是因为Kotlin的限制我们不允许从数据类继承,或者如果你这样做,设计中存在缺陷.
把它分解成一个更简单的问题.从Java中的POJO类继承是错误的吗?
A 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;
}
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin中相当于它不是一个数据类,而只是一个像这样的简单类:
class User(var name: String, var age: Int)
Run Code Online (Sandbox Code Playgroud)
这将创建两个可变属性(字段,加上getter和setter)以及构造函数.这已经等同于上面的POJO.
什么加入data改性剂在此之上做的是产生equals,hashCode,toString方法.它还添加了一些特定componentN于Kotlin的方法:用于解构声明的copy方法和方法.
这些生成的方法,特别是上面提到的前三个方法,如果数据类相互继承,则会很复杂.请参阅KEEP中有关此主题的详细信息.又见这个和这个的话题讨论.
在Kotlin中,您不能从数据类继承,因为编译器没有合理的方法来生成为数据类自动提供的所有方法.
在Java中,没有编译器生成的方法实现,例如equals,hashCode和toString,并且您可以自由地以在您的情况下最合理的方式实现它们.因此,没有理由从POJO继承它是错误的.
| 归档时间: |
|
| 查看次数: |
2675 次 |
| 最近记录: |