kotlin知识点
- 主构造函数里的参数,如果不声明为var或者val,则这个参数一般是用来初始化父类。它不算是这个类的字段,它的作用域只在主构造函数当中。
- val 的对象不仅数据不能变, 引用也不能变。
-
//自定义的类似apply功能的顶层函数 fun <T> T.build(block: T.() -> Unit): T { block() return this }
//第一个T代表这个函数是泛型, 第二个T代表这个build函数是T这个类的扩展函数, 第三个T代表我传进去的函数类型的参数具有T这个类的上下文,第四个T代表函数返回类型是T - 像工具类这种功能,在kotlin中推荐用“单例类来实现”,但如果确实想要实现类似与类方法(静态方法)的方法的话:
class Example{ ... ... companion object {
@JvmStatic fun doAction(){ .... } } } //Example.doAction()第二种方法则是使用“顶层方法”
-
fun <T>later(block:() -> T) = Later(block)//封装的顶层函数 //满足实现懒加载的类 class Later<T>(val block:() -> T) { var value: Any? = null operator fun getValue(any :Any?, prop:KProperty<*>):T{ if(value == null){ value = block() } return value as T } } val p by Later<Int> {//第一种直接使用类的方法 println("make when run") 123 } val q by later {//使用包装成了顶层函数的方法 println("make when run too") "hello?" } fun main(){ println("-----") println(p) println(p) println(q) println(q) } ----- make when run 123 123 make when run too hello? hello?
- 如何去除 原生字符串 的前导空格
val withoutMargin1 = """ |ABC |123 |456""".trimMargin() println(withoutMargin1) val withoutMargin2 = """ XYZ foo bar """ println(withoutMargin2) - 编译时常量只能在函数(指包括 main 在内的所有函数)之外定义。这是因为,编译时常量 必须在编译时(程序编译时)赋值,而 main 和其他函数都是在运行时(程序运行时)才调用, 函数内的变量也是在那时赋值。编译时常量要在这些变量赋值前就已存在。 因为使用复杂的数据类型可能会危害编译时的安全保障,所以编译时常量只能是一些常见的 基本数据类型。第 13 章会介绍数据类型构建的相关知识。以下是编译时常量支持的基本数据类型: String Int Double Float Long Short Byte Char Boolean

浙公网安备 33010602011771号