Kotlin之在Gradle中无参(no-arg)编译器插件的使用

一、前言

最近在用Kotlin+Spring Boot写一个后端项目,实体类习惯性地用了Kotlin中的data class,可是Spring要求要有一个无参的构造函数,不然可能会抛出java.sql.SQLDataException。要使data class可以生成一个无参的构造函数,有两种方法能够作到:html

1.给data class的构造函数中的每个参数都赋上默认值。好比:java

data class User(
    @TableId(value = "id", type = IdType.AUTO)
    var id: Int?=-1,
    var userName: String?=null,  //用户名
    var age: Int?=null,  //年龄
    var password: String?=null,  //密码
    var name: String?=null,  //姓名
    var email: String?=null   //邮箱
) : Serializable

2.使用无参编译器插件no-arg。下面咱们就来看看这种方法。sql

二、具体步骤

2.1 添加插件依赖

首先须要在工程的build.gradle中添加no-arg插件的依赖,版本跟Kotlin的版本一致:后端

plugins {
       ……
    id "org.jetbrains.kotlin.plugin.noarg" version "1.3.41"
}

我用的是plugins的形式,若是你使用的是buildscript 块的话就能够这样添加:app

buildscript {
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-noarg:1.3.41"
    }
}

apply plugin: "kotlin-noarg"

2.2 指定无参注解列表

说实话,在看官方文档时这一步并很差理解,这里只描述我通过本身的实践以后得出的经验。首先建立一个注解类,类名咱们能够定为NoArg函数

annotation class NoArg

而后最关键一步来了,回到工程的build.gradle文件,添加无参注解列表:gradle

noArg {
    annotation("com.lindroid.projectname.annotation.NoArg")
}

annotation中的路径就是咱们建立的NoArg注解类所在的包目录。路径必定要写好,不要出错!此时无参插件就已经配置好了。咱们能够在data class前面添加@NoArg注解,这样编译器就能为其生成一个无参构造函数。使用示例以下:ui

@NoArg
data class User(
    @TableId(value = "id", type = IdType.AUTO)
    var id: Int?,
    var userName: String?,  //用户名
    var age: Int?,  //年龄
    var password: String?,  //密码
    var name: String?,  //姓名
    var email: String?   //邮箱
) : Serializable

2.3 kotlin-jpa中的无参注解

若是你的项目中已经添加了kotlin-jpa插件,那么基本上就没必要单独添加无参插件了。kotlin-jpa对无参插件作了包装,当你使用 @Entity @Embeddable @MappedSuperclass这几个注解时,都会默认支持无参注解的。spa

三、参考文章

Kotlin官方文档.net

相关文章
相关标签/搜索