官方在线Reference
kotlin-docs.pdf
Kotlin for android Developers 中文翻译
Kotlin开发工具集成,相关平台支持指南
Kotlin开源项目与Libraries
Kotlin开源项目、资源、书籍及课程搜索平台
Google’s sample projects written in Kotlin
Kotlin and Android
Kotlin中没有静态(static)关键字,如下这样声明,就是一个类似java中的静态内部类:
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo()
以 inner class 声明:
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo()
以 object: 来对应java中 匿名内部类的声明
class MouseEvent
interface MouseAdapter {
fun mouseClicked(e: MouseEvent)
fun mouseEntered(e: MouseEvent)
}
fun addAdapter(adapter: MouseAdapter) {
}
fun load() {
addAdapter(object : MouseAdapter {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
}
如果在一个java源文件中,声明一个含单个抽象方法的接口类:
public interface MyInterface {
void doAction();
// void doAction2();
}
这时在kotlin中,可以用kotlin中lambda表达式的调用形式:
val action = MyInterface { } //java的void,对应kotlin中的Unit
枚举类是类型安全的,普通的形式如下:
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
如,
enum class Color(val rgb: Int) {
RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF);
}
这样的枚举类,可以调用其中枚举对象的属性:
val colorCode = Color.RED.rgb
如果在声明构造参数时,没有val修饰:
enum class Color(rgb: Int) {
RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF);
}
是不能,通过Color.RED.rgb
来进行调用的
enum class ProtocolState {//含抽象方法
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
},
Test {
override fun signal(): ProtocolState {
return WAITING
}
};
abstract fun signal(): ProtocolState
}
跟java中是一样的,每个枚举对象内,都要实现该抽象方法的
fun main(args: Array) {
var direction = Direction.EAST
direction = Direction.valueOf("NORTH")
val ary: Array = Direction.values()
for (d in ary) {
println("name=${d.name}, ordinal=${d.ordinal}")
}
Color.values().forEach {
println("name=${it.name}, ordinal=${it.ordinal}, ${it.rgb}")
}
//kotlin1.1 新增的操作函数 enumValues() <==> EnumClass.values()
enumValues().forEach { }
//kotlin1.1 新增的操作函数 enumValueOf(String) <==> EnumClass.valueOf(String)
enumValueOf("RED")
}