Kotlin 基础
假笑骑士
If you can't fly then run, if you can't run then walk, if you can't walk then crawl, but whatever you do, you have to keep moving forward.
展开
-
Kotlin细节十六:Kotlin 的接口不支持SAM
Kotlin中 定义的 接口和 java中定义的接口区别java中定义的接口 和方法public interface CallBack { void onSuccess(int response); static void getCallBack(CallBack callBack){ callBack.onSuccess(1); }}Kotlin 中定义的 接口和方法class BodyTemperatureModel { interfac原创 2020-06-28 00:14:40 · 337 阅读 · 0 评论 -
Kotlin细节十五:作用域函数与 this it 关键字
高阶函数中 的 it 与this我们在定义高阶扩展函数的时候 ,某个参数是函数类型,假如想要把 扩展对象传递给 这个函数类型 。可以通过 两种方式 定义 函数类型f: T.() -> Unit ,函数类型为带接收者的函数类型,接收者和扩展对象一致f: (T) -> Unit , 函数类型的参数为 扩展对象类型。关于 it 和thisthis 用于 带...原创 2020-04-18 20:01:46 · 4068 阅读 · 0 评论 -
Kotlin细节十四:密封类和枚举类
使用情况密封类和枚举类,都使用于描述某种情况的集合,比如播放器的播放状态 。枚举类枚举类和java 并没有区别 。每一个枚举都是枚举类的实例。所以不需要我们自己创建,但是也限制了我们为枚举设置动态属性。这也是和密封类的区别。enum class Funcs:Runnable{ Car{ override fun run() { print...原创 2020-04-17 16:49:49 · 923 阅读 · 0 评论 -
Kotlin细节十三:data class 的优点 与局限
date class 限制date class 不能是 open 的,也就是没法被其他类继承date class 不能是抽象的date class 不能是 内部类date class 自动生成的代码是什么样的data class man(val name:String,val age:Int){}反编译后可以看到自动生成了get sethashcodeequals...原创 2020-04-17 15:46:19 · 2034 阅读 · 0 评论 -
Kotlin细节十二:object 关键字
object 对象声明java 中 要声明一个静态类 ,必需声明成静态内部类,也就是必须依赖非静态的类,而且 java 中的静态变量,静态方法,和非静态的 方法放在了一起。这种方式是混乱的,所以Kotlin 引入了 object 对象声明 。就像声明一个变量一样,声明一个静态对象(不需要调用构造器获得)。对象声明的初始化过程是线程安全的并且在首次访问时进行。需引用该对象,我们直接使用其名...原创 2020-04-16 23:51:48 · 231 阅读 · 0 评论 -
Kotlin细节十一:延迟初始化
lateinit 和by lazy当我们不想声明一个类型可空的对象,而且也没法在构造器中初始化它,可以通过两种方式解决lateinit ,告诉编译器,不要因为属性变量未被初始化而报错。这是一种压制性的做法,lateinit 不能修饰基本类型lazy是一种属性委托,lazy() 是接受一个 lambda 并返回一个 Lazy < T > 实例的函数,返回的实例可以作为实现延迟属...原创 2020-04-16 21:19:56 · 448 阅读 · 1 评论 -
Kotlin细节十:koltin 构造函数 ,构造块与java 的区别
java 构造块 与 kotlin init 的区别koltin 的init 块可以访问 构造器中的参数 。但是java 的构造块 无法访问构造函数的 参数。Kotlin和java 构造器的区别java 可以有多个构造器 ,而且互相之间可以没有依赖,但是Kotlin 认为这是一个弊端,让我们类的构造变的混乱化。Kotlin 的构造器分为主构造器和 次构造器。如果定义了主构造器,那么次构造器...原创 2020-04-16 16:56:53 · 398 阅读 · 1 评论 -
Kotlin细节九:函数类型与Lambda 表达式
java Lambda1.Java 的lambda 表达式 是接口式函数。:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为 lambda 表达式。 Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。如定义了一个函数式接口如下:@FunctionalInterface...原创 2020-04-16 01:35:48 · 376 阅读 · 3 评论 -
Kotlin细节八:表达式
表达式与语句的区别表达式是有返回值的,而语句是没有返回值的,例如 java中的if else 和 kotlin if else 的区别。Kotlin 中 ,if else ,when ,try catch 都是表达式,可以作为返回值使用。运算符和中缀表达式通过 operator 关键字 和扩展函数可以实现运算符重载 。标有 infix 关键字的函数也可以使用中缀表示法(忽略该调用的点...原创 2020-04-15 23:40:07 · 113 阅读 · 0 评论 -
Kotlin细节七:空安全与类型转换安全
平台类型平台类型,来自java 代码的 对象引用。由于无法确定是空还是非空用XXX!来表示 。平台类型的安全性由使用者自己决定,可以将平台类型传递给 非空类型。public class JavaClass { String name; String career = "码农";}fun main(){ var javaClass:JavaClass = JavaC...原创 2020-04-15 21:40:05 · 251 阅读 · 0 评论 -
Kotlin细节六:类
类的定义:成员变量和 构造方法成员变量必须有确定的值 ,可以在声明时赋值,也可以在构造方法中赋值Kotlin 的构造方法 可以 放在类 的内部,也可以放在头部,也可以省略 。class SimpleClass { var i:Int // 需要在构造方法中执行一些操作时,这种写法最合适 constructor( x:Int){ this.i = x ...原创 2020-04-15 11:18:40 · 117 阅读 · 0 评论 -
Kotlin 细节五:函数
Kotlin 的函数与方法在Java 中好像是没有函数这个概念的,都是方法。但是在Kotlin 中函数是一等公民,它可以不依赖于类,如顶级函数。而方法是指,带接收者的函数 如Object.toString() 。 Object 就是接收者 。XXX.xxx() 的就是方法。当然函数与方法直接是可以转换的。 例如:python 的self 参数。class KotlinFuction {...原创 2020-04-14 16:06:39 · 107 阅读 · 0 评论 -
Kotlin 细节三:集合与泛型
Kotlin 的Collections 与Java 的关系Kotlin 通过typealias 关键字将 Kotlin 的集合映射为 java的集合。目的是:为了以后在更多的平台上运行。只提供接口,具体实现依赖于平台。@SinceKotlin("1.1") public actual typealias RandomAccess = java.util.RandomAccess@Since...原创 2020-04-14 14:48:36 · 693 阅读 · 0 评论 -
kotlin 细节四:静态函数和 静态变量
为什么Kotlin 没有static 关键字在java 的世界中 ,类是一级公民,所有的东西,方法呀,变量啊都必须依赖于类 。但是有的方法和类本身没有关系,例如 JDK 中 的Collections了。而Kotlin 中函数是一级公民,因此就不需要去创建这些无意义的类, 相反,可以把这些函数接放到代码文件的顶层,不用从属于任何的类。如果你需要从包外访问它,则需要 import 关键字。顶层函...原创 2020-04-14 10:44:07 · 610 阅读 · 0 评论 -
kotlin 细节二:区间的概念和使用
区间的定义kotlin 的 区间是通过 运算符重载和 扩展函数来实现的: val range1= 1..10 // 闭区间 val range2 = 1 until 10 // 左闭右开区间 val range3 = 1 ..10 step 5 // 带步长的区间 val range4 = 10 downTo 1 ...原创 2020-04-13 23:29:15 · 813 阅读 · 0 评论 -
Kotlin 细节一:基础数据类型 与数组
Kotlin原始类型长整形 必须以大写的 L结尾,而浮点型可以以 d 和f 结尾Kotlin 中 == 代表java 的equal , === 代表地址比较kotlin 不支持Number 类型的 自动转化,如 int 自动转long ,需要调用parse方法kotlin 1.3支持 无符号类型kotlin 中没有 int、long、char、double 这样的...原创 2020-04-13 22:42:55 · 313 阅读 · 0 评论 -
Kotlin闭包和java闭包的对比
一、kotlin的lambda 表达式对比java的内部类Kotlin 闭包 和 java 的区别 是在于对 方法 局部变量的处理。kotlin可以修改局部变量的引用。java 匿名内部类 ,访问的局部变量必须添加final声明 ,并且不能修改 方法局部变量的引用 。java 匿名内部类的构造方法中把 局部变量 x的引用传递给了自己创建的变量 copyX 。实际访问的是copyX。ko...原创 2019-11-22 17:00:07 · 651 阅读 · 0 评论 -
探秘Kotlin Lambda表达式在 jvm 上的实现
class FunctionTest { fun test(intNum: Int, func:(Int) ->Int){ print(" 测试 " +func(intNum)) } fun doTest(){ test(108){ it.plus(it) } }}这段代码通过jad...原创 2019-11-22 10:35:55 · 355 阅读 · 0 评论