随笔分类 - kotlin
摘要:一、这六个的函数 // 扩展函数run public inline fun <T, R> T.run(block: T.() -> R): R { return block() } // 扩展函数let public inline fun <T, R> T.let(block: (T) -> R):
阅读全文
摘要:JVM上的泛型一般是通过类型的擦除实现,就是泛型类实例的类型实参在运行时不保留。 但是可以通过声明为inline函数使其类型实参不被擦除 那么对类型擦除有啥好处呢?应用程序使用的内存总量较小,因为要保存在内存中的类型信息更少。 一、类型检查和转换 1、类型检查 因为类型会被擦除,那么需要知道是否包含
阅读全文
摘要:一、泛型函数 如下是泛型函数的一种构造 在fun函数标记的右边增加该函数要使用的类型形参 fun <T> List<T>.slice(indices: IntArray): List<T> { val ret = mutableListOf<T>() for (v in indices) { ret
阅读全文
摘要:一、lambda表达式是否可以使用return 1、非内联函数的lambda表达式中使用return是不被允许 2、内联函数是允许使用return,它会从调用该lambda的函数中返回 fun lookForAlice(people: List<String>) { people.forEach {
阅读全文
摘要:一、当函数被声明为内联函数(函数的前缀增加inline),那么函数体会被直接替换到函数被声明的地方,而不是被正常的调用。如下的代码 inline fun synchronized(lock: Lock, action: () -> Unit) { lock.lock() try { return a
阅读全文
摘要:一、定义:以另一个函数作为参数或者返回值的函数 1、kotlin中,函数以lambda或者函数引用来表示 二、函数类型 1、如下是函数的类型 上述声明了函数的类型,括号内包含了该函数类型需要传入的参数类型,紧接着箭头,最后是返回的类型(在声明函数类型时候,返回类型即使是Unit也不可以省略) 2、函
阅读全文
摘要:一、二元运算符的重载 1、常见的运算符有:加、减、乘、除、求余;我们要重载这些运算符的操作 这里以加法重载运算符为例 data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return
阅读全文
摘要:一、lambda表达式的格式 这里介绍该表达式的几个用法 data class Person(val name: String, val age: Int) val peoples = listOf(Person("aa", 29), Person("bb", 30)) println(people
阅读全文
摘要:一、伴生对象的目标 1、java的类中有静态成员或函数但是kotlin中没有静态成员或者函数 2、但是伴生对象依赖包级别的函数和对象声明,可以用来替代java中的静态成员和函数 3、伴生对象的本质是静态的 class User private constructor(val nickname: St
阅读全文
摘要:一、属性的继承 1、属性和函数类似也是可以继承 interface Parent { val addr: String // 这里是接口所以默认是open,如果是普通类中要被继承则需要显示写open } class Child: Parent { override val addr: String
阅读全文
摘要:一、构造方法的组成 1、主构造方法 class View(tt: Int) {.....} class View constructor(tt: Int) {....} 如上所示有两种方式,且都是在类体外的括号中 第二种方式增加了constructor,正常情况下constructor是可以省略,除
阅读全文
摘要:一、接口类型 1、和java一样:接口使用interface关键字 interface Clickable { fun click() } 2、和java的差异是:接口也允许有默认的实现,java则需要default关键字 interface Clickable { fun click() fun
阅读全文
摘要:前提:kotlin在编译的时候会转换成对应的java 一、java的可变参数类型: java类型的类似: void func(Integer... values) {} 那么对应的kotlin的类型类似:fun func(vararg values: Int?) {} 注意:这里我使用的是Int?
阅读全文
摘要:函数是以fun开头 一、函数的普通例子 这是一个带模板的函数 fun <T> joinToString1(collection: Collection<T>, sep: String, prefix: String, suffix: String): String { val result = St
阅读全文
摘要:一、if的使用 1、if和java不一样的是:if是有结果的表达式 函数的返回值可以是:return if (a > b) a else b; 类似于java的 return a > b? a : b; 可能是这个原因所以kotlin没有这个三目运算符 二、函数体 kotlin除了循环外,大部分控制
阅读全文