官方文档java
官方中文闭包
val y: Int = 1 //不可变 var x: String ="" //可变
fun xxx( x: String, y: Int = 1): Boolean { return true } fun a( x: Int) : Int = 1+x //
contructor
, 函数体用 init
, 继承关系用 :
代替java的 extendsclass ABC contructor(xxxx) : PARENT { init { } }
val a:String = null // error val a:TT? = null //有?,能够 = null a.fff() //error a?.fff() //ok 等价于 if( a != null ) { a.fff(); }
class A { var x: String get() { return field } set() { field = value } }
{ }
块的最后一行做为返回值val x = if ( y <1 ) { 1 } else { 2 }
when( x ) { 1 -> { doSomething1() } 2 -> { doSomething2() } else -> { doSomething3() } // 和 default: 功能同样 }
// A 是java类, 只有 a(), 没有 b() 方法 // val x = A(); x.b() 是错误的 // // 定义扩展函数 fun A.b() { } // 而后 val x = A() x.b() // OK
${}
: {}
内部能够填任何表达式val x = 5 val y = "y=${ x + 6 }" //字符串值为 "y=11"
x ? y : z
表达式,只有 ?:
运算符a = b ?: c
等价于函数
if ( b != null) { a = b } else { a = c }
+
, -
, *
, /
等基本运算符的行为详情学习
class A { fun f1 () { } } a = A() x = a::f1 //将 A的方法 f1() 传给 x x () // = 调用 a.f1()
java 的 Lamda 表达式.net
a = ( String a1, int a2 ) -> { return a1 + a2 } // a 能够当函数调用 y = a ( "x" , 1) // y = "x1"
kotlin:线程
a = { a1: String, a2: Int -> a1 + a2 } // a 能够当函数调用 y = a ( "x" , 1) // y = "x1"
括号的位置与java不一样, 没有 return 语句,最后一行就是返回值code
只有一个参数时,参数能够不写,默认为 it
对象
fun f1() { fun fx( x: Int) { return 1+ x } return 5 + fx( 1 ) }
若有某java接口 IAblog
java继承
newA = new Object() entends IA { //... }
kotlin
newA = object : IA { // ... }
class A { companion { fun y1() { } //每一个类只有一个companion对象 } } object B { val x1: Int = 1 } // 能够这样调用, 不须要调用构造函数 A.y1() x = B.x1
(参数1类型,参数2类型, ...)->返回值类型
fun f1( x: Int , y: String, z: Float = 10f ) { return y + x } // 打乱 x, y 的调用顺序 f1( y = "hello", x = 5 )
()
外面如启动线程作某事
thread( start = true, { doSomething() })
===>
thread( strat=true ) { doSomething() }