当前位置: 首页 > news >正文

《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环境下文件名可以显示正常&#xff0…...

如何选择适合的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 "对接方&#xff1a;<font color\…...

介绍一下数组(c基础)(smart 版)

c初期&#xff0c;记住规则&#xff0c;用规则。 我只是介绍规则。&#xff08;有详细版&#xff0c;这适合smart人看&#xff09; 数组&#xff08;同类型&#xff09; int arr[n] {} ; int 是 元素类型。 int arr[n] {} ; arr为标识符。 {} 集合&#xff0c;元素有次…...

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)

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

探索数据科学与大数据技术专业本科生的广阔就业前景

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

微服务架构面试内容整理-Zuul

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

解决Knife4j 接口界面UI中文乱码问题

1、查看乱码情况 2、修改 编码设置 3、删除 target 文件 项目重新启动 被坑死了...

微服务架构面试内容整理-Sleuth

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

Go语言的接口示例

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

【Apache ECharts】<农作物病害发生防治面积>

在vs Code里打开&#xff0c; 实现 1. 首先引入 echarts.min.js 资源 2. 在body部分设一个 div&#xff0c;设置 id 为 main 3. 设置 script 3.1 基于准备好的dom&#xff0c;初始化echarts实例 var myChart echarts.init(document.getElementById(main)); 3.2 指定图表的…...

基于vue3实现的聊天机器人前端(附代码)

<template><div class"container"><!-- 页面头部 --><header><h1>跟它说说话吧&#xff01;</h1><p>一个活泼的伙伴&#xff0c;为你提供情感支持&#xff01;</p></header><!-- 聊天容器 --><div c…...

DICOM标准:深入详解DICOM医学影像中的传输语法

引言 DICOM&#xff08;数字成像和通信医学&#xff09;标准在医学影像数据交换中扮演着至关重要的角色。其中&#xff0c;*传输语法&#xff08;Transfer Syntax&#xff09;是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个表&#xff08;sec_1,sec_2&#xff09; 文件 …...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

篇章一 论坛系统——前置知识

目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构​编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...

vite ts 配置使用@ 允许js

1.vite.config.ts 配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import { fileURLToPath, URL } from node:url import setup_extend from vite-plugin-vue-setup-extend// https://vite.dev/config/ export default defineConfig({plugins: …...