![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kotlin
文章平均质量分 69
唐僧洗澡不秃头
秃头不洗澡,洗澡不秃头
展开
-
Kotlin学习之枚举类
Kotlin 枚举类枚举类最基本的用法是实现一个类型安全的枚举。enum关键字在类头中的class关键字前面enum class Color{ ...}枚举常量枚举常量使用逗号分隔,每个枚举常量都是一个对象。enum class Color { RED, GREEN, BLUE}访问枚举常量枚举相关属性:val name: String //获取枚举名称val ordinal: Int //获取枚举值在所有枚举数组中定义的顺序使用方式为:枚举原创 2021-04-17 16:25:31 · 209 阅读 · 0 评论 -
Kotlin学习之类与对象、继承与构造函数
2.5.1 类与对象首先创建一个Person类。右击包→New→Kotlin File/Class,在弹出的对话框中输入“Person”。对话框在默认情况下自动选中的是创建一个File,File通常是用于编写Kotlin顶层函数和扩展函数的,我们可以点击展开下拉列表进行切换,如图所示。这里选中Class表示创建一个类,点击“OK”完成创建,会生成如下所示的代码:class Person {}这是一个空的类实现,可以看到,Kotlin中也是使用class关键字来声明一个类的,这一点和Java一致原创 2021-04-09 21:19:03 · 296 阅读 · 3 评论 -
kotlin学习之类的修饰符与抽象类,嵌套类,内部类,匿名内部类
类的修饰符与抽象类,嵌套类,内部类,匿名内部类类的修饰符类的修饰符包括 classModifier 和**accessModifier**:classModifier: 类属性修饰符,标示类本身特性。abstract // 抽象类 final // 类不可继承,默认属性enum // 枚举类open // 类可继承,类默认是final的annotation // 注解类accessModifier: 访问权限修饰符private原创 2021-04-09 20:09:06 · 112 阅读 · 0 评论 -
Kotlin学习之Kotlin 类和属性
Kotlin 类和属性类定义Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明。Kotlin 中使用关键字 class 声明类,后面紧跟类名:class Runoob { // 类名为 Runoob // 大括号内是类体构成}我们也可以定义一个空类:class Empty可以在类中定义成员函数:class Runoob() { fun foo() { print("Foo") } // 成员函数}类的属性属性定义类的属性可以用关原创 2021-04-09 19:48:17 · 166 阅读 · 0 评论 -
kotlin学习之标签与break、continue、return
Kotlin 标签@使用标签定义在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签。 要为一个表达式加标签,我们只要在其前加标签即可。Break 和 Continue 标签为for循环贴上标签loop@ for (i in 1..100) { // ……}现在,我们可以用标签限制 break 或者continue:loop@ for (i in 1..100) { for (j i原创 2021-04-07 20:31:16 · 429 阅读 · 0 评论 -
Kotlin学习之基本数据类型
Kotlin 基本数据类型Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。类型位宽度Double64Float32Long64Int32Short16Byte8字面常量下面是所有类型的字面常量:十进制:123长整型以大写的 L 结尾:123L16 进制以 0x 开头:0x0F2 进制以 0b 开头:0b原创 2021-04-07 19:47:40 · 214 阅读 · 0 评论 -
安卓使用kotlin计算指定文件下的以.txt结尾的文件的文件数
安卓使用kotlin计算指定文件下的以.txt结尾的文件的文件数var count =0 fun getTxtFilesCount(srcFile: File?): Int { // 判断传入的文件是不是为空 if (srcFile == null) { throw NullPointerException() } // 把所有目录、文件放入数组 val files: Array<File> = srcFile.listFiles()原创 2021-03-21 18:54:35 · 217 阅读 · 0 评论 -
安卓使用kotlin计时器做一个答题软件的倒计时
安卓使用kotlin计时器做一个答题软件的倒计时//按钮封装了一个 CountDownTimer,它来帮我们计时 private val countDownTimer: CountDownTimer by lazy { //倒数20秒 object : CountDownTimer(20000, 1000) { override fun onFinish() { OK.performClick()原创 2021-03-21 18:53:30 · 533 阅读 · 0 评论 -
kotlin学习之Java与Kotlin代码之间的转换
java转kotlin右键点击你想要转换的.java文件,选择Convert Java File to Kotlin也可以点击工具栏的codekotlin转javaTools->Kotlin->Show Kotlin Bytecode->Decompile点击之后就会在侧边栏看到kotlin bytecode按钮,先打开你想转换的kotlin文件,在选择decompile按钮就会生成一个.java文件,就是我们需要的特别注意,一般情况不论是kotlin转java还是ja原创 2021-01-29 10:06:29 · 182 阅读 · 0 评论 -
kotlin学习之使用DSL 构建专有的语法结构
DSL 的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离其原始语法结果的代码,从而构建出一种专有的语法结构。不管你有没有察觉到,其实长久以来你一直都在使用DSL 。 比如我们想要在项目中添加一些依赖库,需要在app/build.gradle 文件中编写如下内容:dependencies { implementation 'com.squareup.retrofit2:retrofit:2.6.1'原创 2021-01-28 09:43:31 · 299 阅读 · 0 评论 -
Kotlin学习之编写好用的工具方法
1、 来N个数的最大最小值两个数比大小这个功能,相信每一位开发者都遇到过。如果我想要获取两个数中较大的那个数,除了使用最基本的if 语句之外,还可以借助Kotlin 内置的max() 函数,如下所示: val a = 10 val b = 15 val larger = max(a,b)这种代码看上去很简单直观,也很容易理解,因此好像并没有什么优化的必要。可是现在如果我们想要在3个数中获取最大的那个数,应该怎么写呢?由于max() 函数只能接收两个参数,因此需要先比较前面两个原创 2021-01-24 10:21:14 · 253 阅读 · 0 评论 -
Kotlin学习之使用协程编写高效的并发程序
1、协程的概念 协程和线程是有点类似的,可以简单地将它理解成一种轻量级的线程。 要知道,我们之前所学习的线程是非常重量级的,它需要依靠操作系统的调度才能实现不同线程之间的切换。而使用协程却可以仅在编程语言的层面就能实现不同协程之间的切换,从而大大提升了并发编程的运行效率。 举个例子,比如我们有foo() 和 bar()两个方法:fun foo() { print(1) print(2) print(3)}fun bar() { print(4) p原创 2021-01-22 11:40:51 · 347 阅读 · 1 评论 -
Kotlin学习之泛型的高级特性
泛型实体化Java中的泛型是通过类型擦除机制来实现的,而Kotlin却允许将内联函数中的泛型进行实化。要将某个泛型实化需要两个前提条件。首先,该函数必须是内联函数才行,也就是要用inline关键字来修饰该函数。其次,在声明泛型的地方必须加上reified关键字来表示该泛型要进行实化。示例代码如下:inline fun <reified T> getGenericType() = T::class.java然后我们就可以通过以下代码获得泛型的具体类型了:fun main() {原创 2021-01-18 10:23:15 · 148 阅读 · 0 评论 -
Kotlin学习之使用infix函数构建更可读的语法
infix1.什么是infix函数Kotlin允许在不使用括号和点号的情况下调用函数,那么这种函数被称为 infix函数。2.infix 函数需要满足的条件需要满足的条件:必须是成员函数或扩展函数必须只有一个参数其参数不得接受可变数量的参数且不能有默认值3.使用示例在String类中有一个startsWith()函数,用于判断一个字符串是否是以某个指定函数开头的。if( "Hello Kotlin".startsWith("Hello") ){ //处理具体的逻辑}原创 2021-01-15 11:24:35 · 207 阅读 · 0 评论 -
Kotlin学习之泛型与类委托和委托属性
泛型的基本用法泛型主要有两种定义方式,一种是定义泛型类,另一种是定义泛型方法,使用的语法结构都是。当然括号内的T并不是固定要求的,事实上你使用任何英文字母或单词都可以,但是通常情况下,T是一种约定俗成的泛型写法。如果要定义一个泛型类,就可以这么写:class MyClass<T> { fun method(param: T): T { return param } }在调用MyClass类和method()方法的时候,可以将泛型指定成具体的类型,如下所原创 2021-01-14 10:48:14 · 170 阅读 · 0 评论 -
Kotlin学习之高阶函数和内联函数
1、高阶函数定义如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。fun example(func: (String, Int) -> Unit) { func("hello", 123)}可以看到,这里的example()函数接收了一个函数类型的参数,因此example()函数就是一个高阶函数。而调用一个函数类型的参数,它的语法类似于调用一个普通的函数,只需要在参数名的后面加上一对括号,并在括号中传入必要的参数即可,并使用箭头符号,在原创 2021-01-10 12:44:21 · 255 阅读 · 0 评论 -
Kotlin学习之扩展和运算符重载
1、扩展函数扩展函数表示即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。其语法结构非常简单,如下所示:fun ClassName.methodName(param1: Int, param2: Int): Int { return 0}我们先来看一个示例定义一个lettersCount方法,用于统计字符串中包含字母的数量fun lettersCount(str: String): Int { var count = 0 f原创 2021-01-09 12:17:41 · 132 阅读 · 0 评论 -
Kotlin学习之延迟初始化和密封类
1、延迟初始化对于一些变量,如果我们要在后面才对它进行复制,那么我们就要在前面给他初始化为空class MainActivity : AppCompatActivity(), View.OnClickListener{ private var adapter: MsgAdapter? =null override fun onCreate(savedInstanceState: Bundle?) { … //判断是否被初始化 if(!::adap原创 2021-01-07 19:57:32 · 113 阅读 · 0 评论 -
定义静态方法
Kotlin没有直接定义静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法,如单例类,companion object等,这些语法特性基本可以满足我们平时的开发需求了。companion objectclass Util { fun doAction1(){ println("do action1") } companion object{ fun doAction2(){ p原创 2021-01-04 11:06:05 · 398 阅读 · 0 评论 -
标准函数with、run和apply
标准函数with、run和applywithwith函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。示例代码如下:val result = with(obj) { // 这里是obj的上下文 "value" // with函数的返回值}runrun函数的用法和使用场景其实和with函数是非常类似的,只是稍微做原创 2021-01-04 11:05:27 · 1055 阅读 · 0 评论 -
Kotlin学习之字符串内嵌表达式和函数参数默认值
1 字符串内嵌表达式首先来看一下Kotlin中字符串内嵌表达式的语法规则:"hello, ${obj.name}. nice to meet you!"可以看到,Kotlin允许我们在字符串里嵌入${}这种语法结构的表达式,并在运行时使用表达式执行的结果替代这一部分内容。另外,当表达式中仅有一个变量的时候,还可以将两边的大括号省略,如下所示:"hello, $name. nice to meet you!"这种字符串内嵌表达式的写法到底有多么方便,我们通过一个具体的例子来学习一下就知道了。在原创 2021-01-04 11:04:51 · 419 阅读 · 0 评论 -
Kotlin学习之空指针检查
空指针检查空指针是一种不受编程语言检查的运行时异常,只能由程序员主动通过逻辑判断来避免,但即使是最出色的程序员,也不可能将所有潜在的空指针异常全部考虑到。我们来看一段非常简单的Java代码:public void doStudy(Study study) { study.readBooks(); study.doHomework();}这是我们在之前编写过的一个doStudy()方法,我将它翻译成了Java版/*这段代码安全吗?不一定,因为这要取决于调用方传入的参数是什么,如果原创 2021-01-04 11:01:35 · 252 阅读 · 0 评论 -
Kotlin学习之Lambda编程的基础知识
Lambda编程1 集合的创建与遍历集合的函数式API是用来入门Lambda编程的绝佳示例,首先看看创建集合的方式。传统意义上的集合主要就是List和Set,再广泛一点的话,像Map这样的键值对数据结构也可以包含进来。List、Set和Map在Java中都是接口,List的主要实现类是ArrayList和LinkedList,Set的主要实现类是HashSet,Map的主要实现类是HashMap,熟悉Java的人对这些集合的实现类一定不会陌生。现在我们提出一个需求,创建一个包含许多水果名称的集合。如原创 2021-01-03 17:55:25 · 89 阅读 · 0 评论 -
Kotlin学习之接口、数据类和单例类
接口接口是用于实现多态编程的重要组成部分。我们都知道,Java是单继承结构的语言,任何一个类最多只能继承一个父类,但是却可以实现任意多个接口,Kotlin也是如此。我们可以在接口中定义一系列的抽象行为,然后由具体的类去实现。下面还是通过具体的代码来学习一下,首先创建一个Study接口,并在其中定义几个学习行为。右击包→New→Kotlin File/Class,在弹出的对话框中输入“Study”,创建类型选择“Interface”。然后在Study接口中添加几个学习相关的函数,注意接口中的函数不要求有原创 2021-01-03 17:30:36 · 215 阅读 · 0 评论 -
Kotlin学习之初步了解for循环
Kotlin提供了for循环和while循环,其中while循环不管是语法上还是使用技巧上都和Java中的while没有区别,For循环Kotlin抛弃了Java的for-i循环,而对Java中的for-each进行了大幅的加强,变成了for-in循环。首先我们来了解下区间的概念,因为这也是Java中没有的东西。我们可以使用如下Kotlin代码来表示一个区间:val range = 0..10上述代码表示创建了一个0到10的区间,并且两端都是闭区间,这意味着0到10这两个端点都是包含在区间中的,原创 2021-01-01 18:13:09 · 473 阅读 · 0 评论 -
kotlin学习之变量函数、if语句和when语句
变量与函数变量在Kotlin中定义变量的方式和Java区别很大,在Java中如果想要定义一个变量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表示b是一个字符串变量。而Kotlin中定义一个变量,只允许在变量前声明两种关键字:val和var。val(value的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应Java中的final变量。var(variable的简写)用来声明一个可变的变量,这种变量在初始赋值之后仍然可以再被重原创 2020-12-30 12:28:35 · 580 阅读 · 0 评论