《Kotlin实战》-附录
附录
本部分内容只是简单列举下Kotlin应用以便指引进一步深入学习Kotlin。
附录A:构建Kotlin项目
本节只会记录下gradle的应用,其他需要时请自行搜索查看。
A.1 用Gradle构建Kotlin代码的项目
构建Kotlin项目的标准Gradle脚本如下:
buildscipt{ext.kotlin_version = "1.0.6"repositories{mavenCentral()}dependencies{classpath "org.jetbrains.kotlin:" + "kotlin-gradle-plugin:$kotlin_version"}
}apply plugin:'java'
apply plugin:'kotlin'
repositories{mavenCentral()
}dependencies{classpath "org.jetbrains.kotlin:" + "kotlin-gradle-plugin:$kotlin_version"
}
脚本在以下位置查找Kotlin源文件:
- 代码源文件位置:src/main/java和src/main/kotlin
- 测试源文件位置:src/test/java和src/test/kotlin
如果使用Kotlin反射,需要添加反射库:
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
A.1.1 用Gradle来构建Kotlin Android应用
Android应用和普通Java应用构建过程不同,需要添加
apply plugin:'kotlin-android'
而不是
apply plugin:'kotlin'
如果需要把Kotlin源代码放在特定目录下,如src/main/kotlin,则需要注册他们
android{...sourceSets{main.java.srcDirs += 'src/main/kotlin'}
}
A.1.2 构建需要处理注解的项目
如果要在Kotlin使用时依赖注解处理,需要添加:
apply plugin: 'kotlin-kapt'
如果试图引入Kotlin到现有的一个使用注解处理的Java项目中,那么需要删除apt工具的现有配置。
Kotlin注解处理工具包含了Java和Kotlin类的处理,两个单独的注解处理工具是多余的。
可以使用kapt依赖配置来配置注解处理所需的依赖关系。
如下:
dependencies{compile 'com.google.dagger:dagger:2.4'kapt 'com.google.dagger:dagger-compiler:2.4'
}
如果对androidTest或test使用注解处理器,则对应的kapt配置应该分别为kaptAndroidTest和kaptTest。
A.2 使用Maven来构建Kotlin项目
略
A.3 用Ant来构建Kotlin项目
略
附录B:Kotlin代码的文档化
B.1 给Kotlin代码写文档注释
1.KDoc
为Kotlin声明编写文档注释的格式与Java类似,称为KDoc。
和JavaDoc一样,注释同样以/**
开始,并使用@
开头的标签来记录声明的特定部分。
两者的主要区别在于,KDoc用来写入注释的格式是Markdown而不是HTML。
KDoc还支持一些额外的约定来引入文档元素,例如函数的形参。
示例:
/**
* Calculates the sum of two numbers,[a] and [b]
*/
fun sum(a:Int,b:Int) = a + b
如上所示,把名称放入括号内,就是在注释中引入一个声明。
这种用法不仅用来记录函数参数,也可以用来引用其他声明。
2.注释中的标签
KDoc使用标签的语法与JavaDoc完全相同。
除了标准的JavaDoc标签以外,还支持额外的特有标签,例如:
@receiver
:记录扩展函数或属性的接受者@sample
:用于将指定函数的文本包含在文档文本之中,作为使用正在记录的API的示例
KDoc不支持的一些JavaDoc标签:
@deprecated
被替换为@Deprecated
@inheritdoc
,Kotlin中文档注释始终通过覆盖声明自动继承。@code、@literal和@link
将替换为相应的Markdown格式
注意,Kotlin团队首选的文档样式是B.1所示的直接文档注释。
只有当参数或返回值具有复杂的语义并且需要从主要文档文本中分离时,才会使用标签。
B.2 生成API文档
Dokka是Kotlin的文档生成工具。其有以下特点:
- 完全支持跨语言的Java/Kotlin项目,可以读取JavaDoc注释和KDoc注释,并生成覆盖模块的API文档。
- 支持多种输入格式,包括纯HTML,JavaDoc风格的HTML和Markdown。
可以从命令行运行Dokka,或者把他作为构建脚本的一部分。
以Gradle构建脚本为例:
buildscript{ext.dokka_version = '0.9.13'repositories{jcenter()}dependencies{classpath "org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}"}
}apply plugin 'org.jetbrains.dokka'
然后通过./gradlew dokka
来为模块生成HTML格式的文档。
其他生成选项可以去查看Dokka文档。
附录C:Kotlin生态系统
Kotlin生态系统非常年轻,但已经非常完整。
在线资源集大成的地方:https://kotlin.link
需要提醒的是Kotlin和Java的生态系统完全兼容,在寻找解决问题过程中,不必只关注于Kotlin库。
C.1 测试
测试相关框架有:
- Junit
- TestNG
- KotlinTest:灵感来自于ScalaTest,支持多种不同的编写测试样式。
- Spek:Kotlin编写的BDD风格测试框架。
- Hamkrest:更有表现力的断言DSL。
- Mockito-Kotlin:提供了一套漂亮的用于mock的DSL。
C.2 依赖注入
相关框架有:
- Spring
- Guice
- Dagger
- Kodein:Kotlin编写,DSL来配置依赖
C.3 JSON序列化
相关框架有:
- jackson-module-kotlin:深度Kotlin集成,支持数据类。
- Kotson:为GSON提供了一套包装器。
- Klaxon:轻量的纯Kotlin方案。
C.4 HTTP Clients
相关框架有:
- Retrofit:REST风格,兼容性好。
- OKHttp:更底层。
- Fuel:纯Kotlin库。
C.5 Web应用
相关框架有:
- Spring 5.0及以上版本原生支持Kotlin。
- Spring Kotlin:支持Spring老版本。
- vert.x
- Ktor
- Kara
- Wasabi
C.6 访问数据库
相关框架有:
- Hibernate:传统Java库
- Exposed
C.7 工具和数据结构
相关框架有:
- RxKotlin:响应式编程。
- funKTionale:实现了各种函数式编程原语。
- Kovenant:Kotlin和Android的promise实现。
C.8 桌面应用编程
相关框架有:
- TornadoFx:用以适配JavaFX。
相关文章:

《Kotlin实战》-附录
附录 本部分内容只是简单列举下Kotlin应用以便指引进一步深入学习Kotlin。 附录A:构建Kotlin项目 本节只会记录下gradle的应用,其他需要时请自行搜索查看。 A.1 用Gradle构建Kotlin代码的项目 构建Kotlin项目的标准Gradle脚本如下: bui…...

yelp数据集上识别潜在的热门商家
yelp数据集是研究B2C业态的一个很好的数据集,要识别潜在的热门商家是一个多维度的分析过程,涉及用户行为、商家特征和社区结构等多个因素。从yelp数据集里我们可以挖掘到下面信息有助于识别热门商家 用户评分和评论分析 评分均值: 商家的平均评分是反映其…...

【Linux】进程信号全攻略(一)
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 信号的概念 二:🔥 信号产生的方式 🦋 使用键盘🦋 系统调用函数🦋 软件条件🦋 进程异…...

linux文件重命名
Linux文件重命名 文件名显示异常问题出在哪里批量改名扩展 文件名显示异常 跑测CTS,linux环境看跑测结果log file显示没问题,倘若windows下看log file名却显示异常,不太方便操作。 问题出在哪里 linux环境下文件名可以显示正常࿰…...

如何选择适合的AWS EC2实例类型
在云计算的世界中,Amazon Web Services(AWS)提供了丰富的服务,其中Elastic Compute Cloud(EC2)是最受欢迎的服务之一。选择合适的EC2实例类型对于确保应用程序的性能和成本效益至关重要。我们九河云通过本文…...

【Uniapp】Uniapp Android原生插件开发指北
前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,或者是第三方公司提供的是Android的库,这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种,Module模…...

【随手笔记】FLASH-W25Q16(三)
#include "bsp_w25q16.h"/*内部函数声明区*/ static HAL_StatusTypeDef bsp_w25q_Transmit(uint8_t * T_pData, uint16_t T_Size); static HAL_StatusTypeDef bsp_w25q_Receive(uint8_t * R_pData, uint16_t R_Size);/*内部函数定义区*//* 函数参数:1、T_…...

2024软件测试面试热点问题
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 大厂面试热点问题 1、测试人员需要何时参加需求分析? 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工…...

【JAVA】java 企业微信信息推送
前言 JAVA中 将信息 推送到企业微信 // 企微消息推送messageprivate String getMessage(String name, String problemType, String pushResults, Long orderId,java.util.Date submitTime, java.util.Date payTime) {String message "对接方:<font color\…...

介绍一下数组(c基础)(smart 版)
c初期,记住规则,用规则。 我只是介绍规则。(有详细版,这适合smart人看) 数组(同类型) int arr[n] {} ; int 是 元素类型。 int arr[n] {} ; arr为标识符。 {} 集合,元素有次…...

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 基于Spring Boot的个人云盘管理系统设计…...

探索数据科学与大数据技术专业本科生的广阔就业前景
随着信息技术的不断发展,数据科学与大数据技术已经成为各大行业的关键推动力。在这样一个数据驱动的时代,越来越多的企业依赖数据来驱动决策、优化运营和创造价值。因此,数据科学与大数据技术专业的本科生在就业市场上具有广阔的前景和多样的…...

微服务架构面试内容整理-Zuul
Zuul 是由 Netflix 开发的一个边缘服务(API 网关),用于动态路由、监控、认证、以及对微服务架构中的请求进行过滤。它在微服务架构中扮演着重要的角色,提供了一种集中管理和控制服务访问的方式。以下是 Zuul 的主要特点、工作原理和使用场景: 主要特点 1. 动态路由: Zuu…...

解决Knife4j 接口界面UI中文乱码问题
1、查看乱码情况 2、修改 编码设置 3、删除 target 文件 项目重新启动 被坑死了...

微服务架构面试内容整理-Sleuth
Spring Cloud Sleuth 是一个分布式追踪工具,用于监控微服务系统中请求的传播情况。它通过在微服务之间传递追踪信息,帮助开发者理解系统的行为,快速定位性能瓶颈和问题。以下是 Sleuth 的主要特点、工作原理和使用场景: 主要特点 …...

Go语言的接口示例
Go语言的接口(interface)是一种轻量级的多态性实现方式,是构建高扩展性、高复用性代码的利器。Go语言的接口非常灵活,不要求显式的实现声明,只要一个类型实现了接口规定的方法,它就可以被视为该接口的实现者。在本篇博客中,我们将通过多个实际示例,探讨Go语言接口的使用…...

【Apache ECharts】<农作物病害发生防治面积>
在vs Code里打开, 实现 1. 首先引入 echarts.min.js 资源 2. 在body部分设一个 div,设置 id 为 main 3. 设置 script 3.1 基于准备好的dom,初始化echarts实例 var myChart echarts.init(document.getElementById(main)); 3.2 指定图表的…...

基于vue3实现的聊天机器人前端(附代码)
<template><div class"container"><!-- 页面头部 --><header><h1>跟它说说话吧!</h1><p>一个活泼的伙伴,为你提供情感支持!</p></header><!-- 聊天容器 --><div c…...

DICOM标准:深入详解DICOM医学影像中的传输语法
引言 DICOM(数字成像和通信医学)标准在医学影像数据交换中扮演着至关重要的角色。其中,*传输语法(Transfer Syntax)是DICOM标准中定义数据编码和传输方式的核心部分。理解传输语法对于确保不同设备和系统之间的互操作性…...

sql server 文件备份恢复
数据库介绍文件组 PRIMARY 文件 lys D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\lys.mdf lys_02 D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\lys_02.ndf文件组 sec 有2个表(sec_1,sec_2) 文件 …...

Gradle命令编译Android Studio工程项目并签名
文章目录 gradlew命令gradlew编译debug apkgradlew编译release apkapksigner签名apkgradlew注意事项 gradlew命令 gradlew 是一个脚本文件,它允许你在没有全局安装 Gradle 的情况下运行 Gradle 构建。这个脚本在多平台上可用,对于 Windows 系统来说是 g…...

lua入门教程:垃圾回收
Lua的垃圾回收机制是一种自动内存管理方式,用于回收不再被程序访问的对象,从而避免内存泄漏。以下是一个关于Lua垃圾回收机制的详细教程: 一、Lua垃圾回收机制概述 Lua使用自动内存管理,这意味着程序员不需要手动释放内存。Lua的…...

基于前后端分离架构,SaaS云平台与私有云部署的智慧校园源码,java电子班牌源码
基于前后端分离架构,SaaS云平台与私有云部署的智慧校园源码,java电子班牌源码,自主研发,自主版权,上百个学校应用案例,支持二次开发。 在信息技术飞速发展的今天,教育领域也迎来了一场革命性的变…...

知识总结五
一、C深浅拷贝 浅拷贝:只复制对象的成员变量的值,如果成员变量包含指针,则只复制指针值,不复制指针所指向的数据。深拷贝:复制对象的成员变量的值,并且如果成员变量包含指针,则还复制指针所指向…...

一、初识C语言(1)
1.C语言识别的是二进制语言 C语言是一门计算机语言,计算机是硬件,硬件分通电(1)和 未通电(0)两种情况,所以C语言识别的都是0 / 1信号,也就是二进制语言。 2.C语言文件类型以及基本框…...

petty 状态管理库文档
自研 Petty 状态管理库产生背景 petty 是一款适用于 vue2.5以下版本(目前已兼容vue2.5x 以上版本)的状态管理库,能够在 vue 2这种配置项的代码中,去实现类似于 vue3 里的 pinia、React 里的hook的调用形式,用函数式的…...

SpringMVC学习记录(三)之响应数据
SpringMVC学习记录(三)之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…...

ENSP GVRP动态学习VLAN
手工配置的VLAN称为静态VLAN,通过GVRP协议创建的VLAN称为动态VLAN。 GVRP有三种注册模式,不同的模式对静态VLAN和动态VLAN的处理方式也不同。 GVRP的三种注册模式分别定义如下: Normal模式:允许动态VLAN在端口上进行注册…...

怎么给llama3.2-vision:90b模型进行量化剪枝蒸馏
对 LLaMA 3.2 Vision: 90B 模型进行量化、剪枝和蒸馏,涉及到模型的压缩和优化技术,以减少其计算量和内存占用。以下是实现这些步骤的一般流程: 1. 量化 (Quantization) 量化的目的是减少模型的精度(如从FP32到INT8)&…...

flutter 专题四 Flutter渲染流程
一、 Widget - Element - RenderObject关系 二、 Widget 、Element 、RenderObject 分别表示什么 2.1 Widget Widget描述和配置子树的样子 Widget就是一个个描述文件,这些描述文件在我们进行状态改变时会不断的build。但是对于渲染对象来说,只会使用最…...