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

作者:lindroid 时间:2023-07-31 19:11:43 

1、前言

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

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


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。下面我们就来看看这种方法。

2、具体步骤

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


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

我用的是plugins的形式,如果你使用的是buildscript 块的话就可以这样添加:


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

apply plugin: "kotlin-noarg"

2.2 指定无参注解列表

说实话,在看官方文档时这一步并不好理解,这里只描述我经过自己的实践之后得出的经验。首先创建一个注解类,类名我们可以定为NoArg:


annotation class NoArg

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


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

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


@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这几个注解时,都会默认支持无参注解的。

3、参考文章

Kotlin官方文档

来源:https://segmentfault.com/a/1190000020958806

标签:Kotlin,Gradle,无参
0
投稿

猜你喜欢

  • Java生成二维码可添加logo和文字功能

    2021-06-23 22:24:35
  • java实现ArrayList根据存储对象排序功能示例

    2022-01-24 01:06:05
  • Netty与NIO超详细讲解

    2022-08-16 00:44:37
  • 详解Java中数组判断元素存在几种方式比较

    2021-09-25 13:49:21
  • java LockSupport实现原理示例解析

    2023-05-14 06:43:05
  • C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)

    2021-05-27 03:55:49
  • C#调用动态库

    2021-07-30 03:46:25
  • Android实现环形进度条代码

    2023-06-08 11:09:55
  • 如何解决Java多线程死锁问题

    2022-08-11 15:51:02
  • Java实现AWT四大事件的详细过程

    2023-11-28 18:39:52
  • 实例讲解Java中动态代理和反射机制

    2022-06-29 04:00:50
  • Java实现图片拼接

    2023-02-28 23:01:27
  • java导出csv格式文件的方法

    2022-07-24 20:26:36
  • Java 替换word文档文字并指定位置插入图片

    2023-08-12 22:02:25
  • C++智能指针实例详解

    2021-12-18 00:38:59
  • Android ActionBar完全解析使用官方推荐的最佳导航栏(下)

    2022-04-27 02:35:03
  • Android 沉浸式状态栏与隐藏导航栏实例详解

    2021-09-08 07:51:14
  • IDEA中创建maven项目引入相关依赖无法下载jar问题及解决方案

    2021-06-09 12:51:53
  • 一文搞懂Android RecyclerView点击展开、折叠效果的实现代码

    2023-02-17 14:52:24
  • 解决unity rotate旋转物体 限制物体旋转角度的大坑

    2022-01-14 01:41:49
  • asp之家 软件编程 m.aspxhome.com