Alex Studio

To Be A Lean Developer

Kotlin基础之对象表达式与声明

对象声明与表达式有时需要创建类稍微修改的对象,不用显性声明类的子类。Java使用匿名内部类来处理,Kotlin使用对象表达式和对象声明概括。 对象表达式创建继承某类的匿名类对象:window.addMouseListener(object: MouseAdapter(){ override fun mouseClicked(e: MouseEvent){ ......

Kotlin基础之扩展

扩展Koltin提供与C#和Gosu类似的扩展类的功能,无须继承类或类似装饰者的设计模式。通过称为扩展的特殊声明实现。 支持扩展函数和扩展属性 扩展函数使用接收者类型在函数名前声明扩展函数(接收者类型为要扩展的类型)。 为MutableList<Int>添加swap函数fun MutableList<Int>.swap(index1: Int , index2: In......

Kotlin基础之泛型

泛型与Java一样,Koltin的类也有类型参数class Box<T>(t: T){ var value = t} 常规来说,创建这样的类,需要提供具体的类型val box: Box<Int> = Box<Int>(1) 当类型可以从构造参数或其他上下文中推断出时,可以忽略类型参数val box = Box(1) // 1 ha......

Kotlin基础之数据类、密封类、嵌套类和枚举类

数据类我们经常创建只用来存储数据的类。在这样的类中,一些标准功能常由数据来驱动。这些类在Kotlin中使用data修饰符标记为数据类data class User(val name: String, val age: Int) 编译器自动驱动在私有构造中声明的所有属性,生成为成员。 equals()和hashCode()函数对 User(name=John, age=42)形式的toStr......

Kotlin基础之字段、接口

属性与字段属性声明Kotlin中类拥有属性。用var关键字声明为可变属性,或用val关键字声明为只读属性。 class Address { var name: String = ... var street: String = ... var city: String = ... var state: String? = ... var zip: St......

Kotlin基础之类、继承、可见性修饰符

类与继承类在Kotlin中使用class声明类 class Invoice {} 类声明由类名,类头部(指定类型参数,首要构造等)和用大括号包裹的类体组成。类头部和类体为可选;如果无类体,可省略花括号class Empty 构造器Kotlin的类可以有一个首要构造器和多个次要构造器。首要构造是类头部的一部分,跟在类名之后(参数类型可选)class Person const......

Kotlin基础之基础类型与包

基础类型在Kotlin中,一切皆对象从这种意义上来说,我们可以调用任何变量的属性和方法。有些内嵌类型的实现是经过优化的,但是对于开发者而言看上就是普通的类。这些类型有:数值类型,字符类型,boolean类型,数组类型 数值类型Kotlin使用类似Java的方式处理数值类型,但是与Java不是完全相同。如:不支持数值的隐式扩大转换或在某些情况中字面常量会些许不同。 Kotlin内嵌了以下几种数......

Kotlin基础之跳转与条件循环表达式

跳转Kotlin有三种结构的跳转表达式 return. return默认返回最近的闭合函数或匿名函数 break. 结束最近闭合循环 continue. 执行最近闭合循环下一步 所有跳转表达式可在大的表达式中使用val s = person.name ?: return 跳转表达式的类型为Nothing类型 Break和Continue 标注kotlin中任意表达式都可以用标注来标记,以......

Kotlin基础之内联函数

内联函数使用高阶函数会给运行时带来一些坏处:每个函数都是一个对象,捕获闭包(如:访问函数体内的变量),内存分配(函数对象或Class),虚拟调用引入的运行过载。使用内联Lambda表达式在多数情况下可以消除这种过载。比如下面的函数就是这种情况下的很好的例子,lock()函数可以很容易地在调用点进行内联扩展。lock(l){ foo() } 编译能够产生下面的代码,而不是创......

Kotlin基础之高阶函数与Lambdas

高阶函数在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数: 接受一个或多个函数作为输入 输出一个函数定义一个高阶函数,参数为Lock类型对象和一个函数。函数执行时获取锁,运行函数参数,执行结束释放锁。 fun <T> lock(lock: Lock , body: () -> T){ lock.lock() try{ return......