Alex Studio

To Be A Lean Developer

Kotlin进阶之与Java交互

Kotlin调用JavaKotlin可以自然地调用Java代码,同样Java也可以丝滑般调用Kotlin代码。这节详细描述kotlin调用Java代码。 可以使用几乎所有Java代码。import java.util.*fun demo(source: List<Int>) { val list = ArrayList<Int>() // 'fo......

Kotlin进阶之类型安全建造器、类型别名

类型安全建造器建造器在Groovy社区非常流行,使用半声明方式来定义数据,有利于生成XML,UI组件布局,描述3D场景等等。 多数情况,Kotlin允许类型检查建造器,比Groovy的动态类型实现更具有吸引力。 类型安全构建器范例import com.example.html.*fun result(args: Array<String>) = html { ......

Kotlin进阶之空安全、异常

空安全可为空类型和非空类型Koltin力求消除代码中空引用的问题(价值10亿的错误)。 多数编程语言(包括Java)中一个常见难题:访问空引用的成员导致的空引用异常。Java中称为NullPointerException异常,简称NPE 引起NPE异常的原因有: 显性调用throw NullPointerException() 使用!!操作符 外部Java代码引起的异常 未初始化的数据(如......

Kotlin进阶之注解

注解注解声明注解就是向代码中添加元数据。在类名前添加annotation,来声明注解。annotation class Fancy 使用元注解来注解注解类,来指定注解的额外信息 @Target 表示可以注解的元素类型(类、函数、属性、表达式等) @Retention 表示注解是否存储在编译后的类文件中,是否在运行时可见。(默认值都为true) @Repeatable ......

Kotlin进阶之反射

Reflection反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。Kotlin使函数和属性成为语言中头等公民,且以近似函数式或响应式方式内省属性和函数(如运行时属性名或类型;函数名或类型) 在Java平台上,需要使用反射特性的运行时组件为独立的JAR文件(kotlin-reflect.jar),目的是降低不需要使用反射的应用包的大小。如果要使......

Kotlin进阶之相等、操作符重载

相等Koltin有两种相等比较 引用相等(指向同一个对象的引用) 结构相等(equals()) 引用相等使用===(!==)操作符检查引用相等。如果a和b指向相同对象,则a === b为true 结构相等结构相等使用==操作符。按照规定,a == b会被翻译为:a?.equals(b) ?: (b === null) 如果a不为空,则调用equals()函数,否则检查b引用是否为空。 ......

Kotlin进阶之类型检查、This表达式

类型检查与转型is和!is操作符使用is和!is在运行时检查对象是否满足给定类型。if (obj is String) { print(obj.length)}if (obj !is String) { // same as !(obj is String) print("Not a String")}else { prin......

Kotlin进阶之集合与区间

集合与多数语言不一样,Kotlin区分可变与不可变集合(list,sets,maps等等)。精确控制什么时候可以编辑集合有利于减少BUG和设计良好的API。 在这之前,理解只读的可变集合与实际不变的集合的区别很有必要。两者创建都很容易,但是类型系统表达却不相同。 Kotlin的List<out T>类型是一个接口,提供只读操作如size,get等等。与Java相同,继承Colle......

Kotlin进阶之解构声明

解构声明Kotlin可以将一个对象解构为多个变量val (name, age) = person 这种语法被称为解构声明。解构声明一次创建多个变量。比如声明name和age两个新的变量,可以单独使用println(name)println(age) 解构声明最终编译为下面的代码val name = person.component1()val age = person.component2(......

Kotlin基础之委托及委托属性

委托类委托委托模式是替换继承的较好的设计模式,Kotlin天生支持委托模式,无须任何模板代码。类Derived可以继承Base接口,委托所有public方法给指定对象interface Base { fun print()}class BaseImpl(val x: Int) : Base { override fun print() { ......