Kotlin 学习2
官方文档
kotlin语法与Java的不同
22. 引用java或自定义的函数或变量与kotlin关键字相同是,用两个
` 包起来
// 如果 in 为java的一个函数, 定义如下
// class A{
// void in();
// }
x = A()
x.`in`() // in 是kotlin关键字
kotling关键字:
关键字 | 说明 |
---|---|
abstract | 抽象声明,被标注对象默认是open |
annotation | 注解声明 |
by | 类委托、属性委托 |
class | 声明类 |
companion | 伴生对象声明 |
const | 声明编译期常量 |
constructor | 声明构造函数 |
crossinline | 标记内联函数的lambda表达式参数,标识该lambda函数返回为非局部返回,不允许非局部控制流 |
data | 数据类,声明的类默认实现equals()/hashCode()/toString/copy()/componentN() |
enum | 声明枚举类 |
field | 属性的幕后字段 |
fun | 声明函数 |
import | 导入 |
in | 修饰类型参数,使其逆变:只可以被消费而不可以被生产 |
init | 初始化块;相当于主构造函数的方法体 |
inline | 声明内联函数 |
inner | 标记嵌套类,使其成为内部类:可访问外部类的成员 |
interface | 声明接口 |
internal | 可见性修饰符,相同模块内可见 |
lateinit | 延迟初始化,避免空检查 |
noinline | 禁用内联,标记内联函数不需要内联的参数 |
object | 对象表达式、对象声明 |
open | 允许其它类继承;kotlin类默认都是final,禁止继承 |
operator | 标记重载操作符的函数 |
out | 修饰类型参数,使其协变:只可以被生产而不可以被消费 |
override | 标注复写的方法、属性 |
package | 包声明 |
private | 可见性修饰符,文件内可见 |
protected | 可见性声明,只修饰类成员,子类中可见 |
public | kotlin默认的可见性修饰符,随处可见 |
reified | 限定类型参数,需要配合inline关键字使用 |
sealed | 声明密封类,功能类似枚举 |
super | 访问超类的方法、属性 |
suspend | 声明挂起函数,该函数只能从协程和其他挂起函数中调用 |
throw | 抛异常 |
typealias | 声明类型别名 |
val | 声明只读属性 |
var | 声明可变属性 |
vararg | 修饰函数参数:声明为可变数量参数 |
23. 强制类型转换用 as
或 as?
x: A = y as A //将y强转为 A 类型
x: A? = y as? A //将y强转为 A 类型, 转换失败可为 null
24. import 两个类名相同,包名不同的类,可以设置别名, 用 as
import xxx.xxx.A
import yyy.yyy.A as YA //为避免与 xxx.xxx.A冲突,引进别名
x = A() // == xxx.xxx.A()
y = YA() //使用别名创建对象, == yyy.yyy.A()
25. 任何类型都可以设置别名
typealias A = ABCDEFG //类别太长,设置个短的别名
x = A()
26. 用 is
可判断对象的实际类型,一旦判断成功,可以不用强转,直接使用该类型方法
class ABC {
fun abc() { }
}
val x: Any = ABC()
x.abc() //error, x是Any类型,没有 abc() 方法
if( x is ABC ) {
x.abc() // OK ,已经知道 x 就是 ABC 类型
}
27. 类和函数,属性定义不加 open
,默认是不可继承的
28. in
运算判断元素是否在集合中, ..
运算表示一个范围, !in
运算判断元素不在集合中
x in 1 .. 9 // x = 1 到 9 的任何Int 就返回 true
for( y in 0 .. 100) {
println(y) //循环0到100, 打印
}
29. 函数支持可变参数,可变参数数量不定, 不再支持java 的 new Int[] { 1,2,3 ...}
这样的不定参数初始化
var x = arrayOf(1,2,3) // 数组 [ 1, 2, 3 ]
x = arrayOf(1,2,3,4,5) // 数组 [ 1, 2, 3, 4, 5 ]
不定参数定义
fun f1( vararg ls: Int) {
for ( x in ls ) {
println("${x} , ")
}
}
f1(1,2,3) // 输出 1 , 2 , 3 ,
f1(1,2,3,4,5) // 输出 1 , 2 , 3 , 4 , 5 ,