编译器会自动根据主构造函数中声明的所有属性添加如下方法:

    如果在类中明确声明或从基类继承了这些方法,编译器不会自动生成。

    注意如果构造函数参数中没有 val 或者 var ,就不会在这些函数中出现;

    在 JVM 中如果构造函数是无参的,则所有的属性必须有默认的值,(参看);

    我们经常会对一些属性做修改但想要其他部分不变。这就是 copy() 函数的由来。在上面的 User 类中,实现起来应该是这样:

    有了 copy 我们就可以像下面这样写了:

    组件函数允许数据类在多重声明中使用:

    标准库提供了 PairTriple。在大多数情形中,命名数据类是更好的设计选择,因为这样代码可读性更强而且提供了有意义的名字和属性。