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

 更新时间:2019年11月10日 16:19:38   作者:lindroid  
这篇文章主要介绍了Kotlin之在Gradle中无参(no-arg)编译器插件的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android编程之阴影(Shadow)制作方法

    Android编程之阴影(Shadow)制作方法

    这篇文章主要介绍了Android编程之阴影(Shadow)制作方法,结合实例形式分析了Android阴影效果实现函数setShadowLayer的具体使用技巧,需要的朋友可以参考下
    2016-10-10
  • android中Webview实现截屏三种方式小结

    android中Webview实现截屏三种方式小结

    本篇文章主要介绍了android Webview实现截屏,主要详解了3种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Android实现自动朗读功能(TTS)

    Android实现自动朗读功能(TTS)

    这篇文章主要为大家详细介绍了Android实现自动朗读功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 深入剖析Android系统中Service和IntentService的区别

    深入剖析Android系统中Service和IntentService的区别

    这篇文章主要介绍了Android系统中Service和IntentService的区别,与普通的服务相比,IntentService可以开启单独的线程来处理intent请求,需要的朋友可以参考下
    2016-04-04
  • 如何通过Android Stduio来编写一个完整的天气预报APP

    如何通过Android Stduio来编写一个完整的天气预报APP

    这篇文章主要介绍了通过Android Stduio来编写一个天气预报APP,具体的实现是通过调用天气预报接口来获得天气数据,再将查询的天气信息存储在SQLiteDatabase中,界面则用LIstView和GridView来搭建
    2021-08-08
  • Android中ViewFlipper和AdapterViewFlipper使用的方法实例

    Android中ViewFlipper和AdapterViewFlipper使用的方法实例

    ViewFlipper和AdapterViewFlipper是Android自带的一个多页面管理控件,下面这篇文章主要给大家介绍了关于Android中ViewFlipper和AdapterViewFlipper使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • 为什么不要在 Flutter 中使用全局变量

    为什么不要在 Flutter 中使用全局变量

    这篇文章主要介绍了为什么不要在Flutter中使用全局变量,全局变量是公共变量,可以被Flutter程序中的每个方法和对象访问,全局变量是局部变量的替代品,它们在方法中创建并在该方法中访问
    2022-08-08
  • Android 2.3 拨号上网流程从源码角度进行分析

    Android 2.3 拨号上网流程从源码角度进行分析

    SIM卡实现拨号上网功能之前需要设置一番,这些设置步骤究竟做了哪些事情呢?我们现在就从源码的角度进行分析
    2013-01-01
  • android 日志文件LogUtils实例

    android 日志文件LogUtils实例

    这篇文章主要介绍了android 日志文件LogUtils实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Android水波纹载入控件CircleWaterWaveView使用详解

    Android水波纹载入控件CircleWaterWaveView使用详解

    这篇文章主要为大家详细介绍了Android水波纹载入控件CircleWaterWaveView使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论