《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) 文件 …...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
