Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Kotlin长主构造函数和继承_Kotlin_Spring Data Jpa - Fatal编程技术网

Kotlin长主构造函数和继承

Kotlin长主构造函数和继承,kotlin,spring-data-jpa,Kotlin,Spring Data Jpa,这个问题可以概括,但它是在Spring数据框架中创建Kotlin@Entity类时出现的。每个实体都应该扩展AbstractPersistable,它通常有很多字段: @Entity class Book( var author: String? = null, var title: String? = null ): AbstractPersistable<Int>() @实体 课堂用书( 变量作者:字符串?=null, 变量标题:字符串?=nul

这个问题可以概括,但它是在Spring数据框架中创建Kotlin
@Entity
类时出现的。每个实体都应该扩展
AbstractPersistable
,它通常有很多字段:

@Entity
class Book(
        var author: String? = null,
        var title: String? = null
): AbstractPersistable<Int>()
@实体
课堂用书(
变量作者:字符串?=null,
变量标题:字符串?=null
):AbstractPersistable()
现在,这个片段显示了一个小表。您可以很容易地想象更多的字段(列),通常每个字段都有注释、一个
@Column
@OneToMany
注释,然后在它们之间有空行。它很快就会占满一页。(在我看来)这不是坏事

那些代码让我感到不舒服的是,超级类(或任何实现的接口)与
类书
行分离得太多了,它变得隐藏起来了。只要使用Kotlin的主构造函数特性,就会发生这种情况。一般来说,这很好,但是将类定义的焦点从继承转移到了数据

风格选择是什么

  • 习惯它。新语言,新模式
  • 不要使用此语法。请改用
    构造函数
    关键字。镜像Java的外观。然而,要像以前一样使用该类,您必须吞下一颗苦果:手动创建构造函数,不仅包括所有的赋值,理想情况下还包括所有字段的所有默认值,基本上是复制代码
  • 第三种完美的方式,我现在想不出来

  • 根据我的理解,最接近你所寻找的是:

    class Book private constructor(): AbstractPersistable<Int>() {
        constructor(
            author: String? = null,
            title: String? = null
        ) : this()
    }
    
    class Book私有构造函数():AbstractPersistable(){
    建造师(
    作者:字符串?=null,
    标题:字符串?=null
    ):此()
    }
    
    基本上使主构造函数私有,并强制使用辅助构造函数

    我想指出这一部分:

    “这将类定义的焦点从继承转移到数据”


    这实际上是科特林的意图之一,拥有比继承更多的成分。他们在语言中构建
    by
    的方式也是如此。

    似乎通过equals/hashCode困境给出了一个答案:不要将数据类用作Hibernate实体,而是出于另外一个原因。所以现在,你可以选择你的2。文体选择。问题有点广泛,所以请帮我。你希望它看起来怎么样,比如说用一种完美的未来语言?@deHaar:这个问题不是关于数据类的。我知道这篇博客文章,虽然作者选择不实现Spring数据的持久化,但他的方法与我所写的非常相似:字段优先,最后是超类。@AlexeySoshin:我使用的所有其他语言都将超类/接口放在类属性之前。理想情况下,我希望保持这种方式(就像在爪哇,C++,你可以这样命名),但是保持主构造函数的酷特性,就像Kotlin一样。