Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance Kotlin中数据类的继承_Inheritance_Kotlin_Pojo_Data Class - Fatal编程技术网

Inheritance 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

我知道Kotlin在从数据类继承方面存在限制。在经历这些的过程中,我没有学到更多

Kotlin中的As数据类类似于Java中的POJO。我们是否也应该遵循Java POJO类中的继承?总而言之,是因为Kotlin中的限制,我们不允许从数据类继承,还是因为这样做在设计中存在缺陷


把它分解成一个更简单的问题。在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。