Kotlin
文章平均质量分 77
android_cai_niao
我是一名Android开发工程师,但我的技术好菜,好希望有人出一些容易看得懂的菜鸟教程。
展开
-
IntelliJ导出jar包
这样我们就拥有了一个可以直接运行的jar包了,在cmd中直接进入到该jar包目录下运行该jar包(如上图,这样就设置好一个 ‘工件’ 了,可以看到jar包名称和输出目录,这些可以根据需要去修改。现在,在项目根目录中可以看到多了一个。通过构建菜单来构建出jar包。的目录时,它自动是选择到。如上图,它会自动搜索出。创建一个Java项目。原创 2024-01-31 10:22:02 · 465 阅读 · 0 评论 -
java常量和kotlin常量
从这里也可以看出,为什么常量在编译为class字节码之后,调用它的地方已经被常量值所替换,为什么常量的声明语句还保留了,因为还是有可能会被用到的,比如我们通过反射读取该常量的值,这是需要在运行时才能完成的,无法在编译阶段就直接使用常量值替代的。常量在编译为字节码时无法使用常量值代替,因为它是一个对象,而对象的内存地址得在运行时才能确定,所以这种不应该叫常量的,所以,kotlin在这方面就做的比较好,表示一个变量不可改变用。,它不是在声明时直接赋值的,而是经过一个。中的判断得出值不是1就是2,用。原创 2024-01-30 17:42:46 · 643 阅读 · 1 评论 -
Android Studio代码检查Bug
IDE中识别Kotlin语言写的父类子类时,无法识别,有Bug。原创 2022-10-18 17:04:44 · 831 阅读 · 0 评论 -
IntelliJ更新后Kotlin项目无法运行
当我更新IntelliJ IDEA到2022.1版本后,发现新建的Kotlin项目无法使用了,当前版本如下:创建的项目步骤如下:点击 “新建项目” 按钮来创建新项目,如下:点击 “完成” 按钮后,创建的项目如下:与正常的项目相比,对于Gradle而言,它少了以下文件:wrapper/gradle-wrapper.jargradlewgradlew.bat如果学过Gradle,应该知道,这几个文件是通过执行Gradle命令生成的,所以首先要安装Gradle,对于新版本的Intel原创 2022-04-20 09:44:41 · 1025 阅读 · 0 评论 -
协程和通道
介绍此文是对Kotlin官方关于协程的一个教程翻译,原文:https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/01_Introduction在这个动手教程中,我们将熟悉协程的概念。协程为我们提供了异步和非阻塞行为的所有好处,但又不缺乏可读性。我们将看到如何使用协程执行网络请求而不阻塞底层线程和不使用回调。我们将学习:为什么以及如何使用挂起函数来执行网络请求。如何使用协程同时发送请翻译 2022-04-07 17:54:30 · 365 阅读 · 0 评论 -
通过NIO分割文件和合并文件和计算文件md5
NIO就是香啊,不但效率高,而且写起来代码也少,示例如下:object FileUtil { fun getFileMd5(file: File): String { // 获取md5签名 val md5Bytes = FileInputStream(file).channel.use { channel -> val byteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,原创 2021-11-25 11:49:26 · 950 阅读 · 0 评论 -
BigInteger的使用以及获取文件的md5
前言JDK文档中对BigInteger的描述:不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。按字面理解,BigInteger是一个大整数,有多大呢?可以无穷大!int类型是4个字节,所以int的范围是有限的,而BigInteger能表示的整数范围是无限的。今天在看到同事发的一个获取文件md5的工具类,发现代码中使用BigInteger来把一个字节数组转换为16进制,看着很爽,所以这里也记录一下:fun getFileMd5(f原创 2021-11-24 22:14:00 · 635 阅读 · 0 评论 -
音频基础知识以及PCM转WAV
音频基础知识声音是什么?记得初中学物理的时候我们就学过声音了,声音是由振动产生的,声音在空气中振动形成振动波传到我们的耳朵,我们的耳膜接收到了振动波,所以能感受到声音。声音在空气中的振动波我们看不见,可以把它比作水中的水波,水波是能看见的,如下:我们可以想一想水波产生的样子,然后再把水波想像为无形的声音振动波。振动幅度和振动频率声音由振动幅度和振动频率组成,振幅即上下振动的幅度,当然这个我们也看不见,一般我们会以拨动尺子的上下振动来比喻,如下图:在桌面上按住尺子的一端,此时的尺子是一条直线,原创 2021-11-23 01:51:01 · 4457 阅读 · 1 评论 -
二进制、16进制、大端小端
16进制的使用在开发过程中,写文件是常有的事,如果写的内容是文本,随便用一个记事本软件打开即可查看内容是否正确,如果写的是音频文件,就要用音频软件来查看,如果是视频文件,就要用视频软件来查看。。。对应的文件就要用对应的软件来查看,但是做为开发,要时候是要查看文件的二进制的,比如我们写一个音频转换器的时候,发现转换后的音频无法播放,就需要查看此音频文件的二进制,以分析是哪里的数据出了问题,而看二进制时,看0101010100111这种看定是很少人这么干的,因为我们看二进制主要是看这个二进对应的值是多少,它的原创 2021-11-19 16:39:43 · 3758 阅读 · 0 评论 -
Java和Kotlin中的过时注解
先上结果:Java:@SuppressWarnings("deprecation")Kotlin:@Suppress("deprecation")在最新版本的IntelliJ或者AndroidStudio中,调用一个过时的函数时会有删除线,而且编译的时候也会出现警告信息,但是有时候我们知道它是过时的,而且我们需要使用这个过时的函数,这时候就想去除这个删除线和警告,但是IDE竟然把添加忽略过时的功能给去除了,真是搞不懂为什么要去掉这个功能,以前写代码都是通过IDE功能生成的,现在没有这个功能了,原创 2021-11-12 16:06:24 · 3077 阅读 · 0 评论 -
Kotlin空指针Bug
如上图所未,一个空可的String变量,调用了两个函数,一个没报错,一个报错,后来发现hashCoe()函数没报错是因为它是一个可空对象的扩展函数,如下:public inline fun Any?.hashCode(): Int = this?.hashCode() ?: 0所以,为什么可以在一个可空的String上调用hasCode()函数的原因了。哎,Kotlin为什么要搞这种特殊啊,刚开始不了解情况我还以为是我的编译环境出问题了,这让人很疑惑啊!为什么要搞这种特殊,让人摸不着头脑!!...原创 2021-11-11 12:01:02 · 1312 阅读 · 0 评论 -
Kotlin中的空判断处理
Kotlin中的一个伟大创前举就是空指针的处理,在代码的编译阶段就能检测可能出现的空指针问题,示例代码如下:data class Person(var name: String? = null)fun sayHello(name: String) { println("Hello $name")}fun main() { val person = Person("Even") if (person.name != null) { sayHello(pers原创 2021-10-14 11:54:18 · 4461 阅读 · 0 评论 -
Spring Boot MySQL入门以及Spring Boot对Kotlin支持的一些Bug
Bug重现本人是做Android开发的,不做后端。目前公司有一个应用,功能界面都做了,但是请求接口还没做好,这时我就想自己做个接口,简单做个接口就行了,当然,市面上有那种可以模拟出后台接口的网站,但是我想自己写会比较好一点,比较灵活。跟公司同事了解到,现在Java搞接口已经不用Servlet了,使用Spring Boot,于是请教了他Spring Boot的使用,确实很简单,不需要学什么东西,真的是看一眼就会了。因为我在Android上已经习惯了Kotlin开发,看到Spring Boot也是支持Andr原创 2021-09-18 10:37:46 · 474 阅读 · 0 评论 -
kotlin中的委托
理解委托委托是一种设计模式,具体的操作不用自己实现,而是把操作委托给另一个辅助的对象,我们把这个辅助对象称为委托。注:本篇博客内容来自《Kotlin实战》一书,经过自己的消化与学习整理的。类委托类委托,委托和代理似乎是在讲同一个东西,比如,一个老板想喝咖啡,老板嘛,比较懒,不想自己去买,于是他叫经理给他买,经理又叫他的一个手下去买。在这个关系中,经理可以理解为代理,代老板买东西,但是经理也没有直接去买,而是把工作交给了他的手下去买,这就可以理解成委托,委托他的手下去买。我们可以这样理解,经理是一个原创 2021-08-25 16:37:09 · 461 阅读 · 0 评论 -
计算二维数组的所有组合
前些天写了一篇《一道有趣的Java编程题》,后来发现我的解题方式只适合于通过正确答案一定有错误答案的题,如果通过正确答案找不到对应错误答案的话,就解不出来了。通过和同事交流,知道了可以使用暴力破解,这个说起来好像很简单,但是写起来还是挺难的,难点就在于如何把所有的答案组合统计起来,示例如下:A 1 2B 3 4C 5 6假设有A、B、C三组答案,每一组是两个答案,每组有且仅有一个答案正确,则答案组合的数量有8组(2的3次幂),所有答案组合如下:1、3、51、3、61、4、51、4、原创 2021-04-20 19:22:08 · 590 阅读 · 0 评论 -
AES加密
Java版本import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import java.util.Base64;public class Aes { public static String encrypt(String rawData) { try { return Base64.getEncoder().encodeToString(getCipher(Cipher原创 2021-02-24 17:03:27 · 389 阅读 · 0 评论 -
Kotlin编程技巧
假设有一个集合,List或Map,我只需要取集合里面的第1个元素,普通代码实现如下: val list = mutableListOf("一", "二", "三") val map = mutableMapOf("一" to "1", "二" to "2") val result01 = if (list.isNotEmpty()) list[0] else "" val result02 = if (map.isNotEmpty()) {原创 2021-02-23 18:51:11 · 571 阅读 · 0 评论 -
Kotlin中的协程和多线程比较实验
官方原码示例Kotlin官方教程有一些示例,比如:https://kotlinlang.org/docs/tutorials/coroutines/coroutines-basic-jvm.html,本文实验根据此教程的相关示例进行,开发环境:IntelliJ IDEA Community 2020.3.1版本,创建一个基于Gradle的Kotlin项目,使用jdk版本为jdk1.8,gradle配置如下:plugins { id 'org.jetbrains.kotlin.jvm' versi原创 2021-01-19 22:12:55 · 3374 阅读 · 6 评论 -
猫王运算符
Java中的三目运算符:boolean isOpen = trueString desc = isOpen ? "开" : "关"Kotlin中没有与之对应的三目运算符,有一个很像但功能不同Elvis(猫王)运算符:?:,示例如下:var address: Address? = nullval city = address?.city ?: "未知"?:称为猫王运算符,功能为,如果表达式的结果不是null,则返回表达式的值,否则返回后面的值。Elvis这个单词在有道词典中翻译就只有一个猫王原创 2020-10-09 20:15:10 · 643 阅读 · 0 评论 -
Kotlin中的可变参数传递
fun main() { a()}fun a(vararg args: Any) { println("a.size = ${args.size}") b(args)}fun b(vararg args: Any) { println("b.size = ${args.size}")}输出结果如下:a.size = 0b.size = 1怎么args参数从函数a传到函数b时size就变了呢?因为我们调用函数a时,并没有传任何参数,所以函数a中的args肯定是空的,注意,它只原创 2020-09-18 10:21:03 · 3106 阅读 · 2 评论 -
Kotlin中的List排序
一、排序的简单用法在Java中,对List进行排序可以使用Collections.sort()方法,在Kotlin中有更简单的语法糖,所以这里记录一下,开发中尽量用简单的方式,方便维护。一段未排序的示例代码如下:data class User(val name: String, val isOnline: Boolean)fun main() { val user1 = User("001", false) val user2 = User("002", false) va原创 2020-09-04 17:35:59 · 15913 阅读 · 1 评论