Kotlin实战第二部分


7

Kotlin 允许使用对应名称的函数来重载一些标准的数学运算,但是不能定义自己的运算符。

比较运算符映射为equals 和compare To 方法的调用。

通过定义名为get 、set 和contains 的函数,就可以让你自己的类与Kotlin 的集合一样,使用[]和in 运算符。

可以通过约定来创建区间,以及迭代集合和数组。

解构声明可以展开单个对象用来初始化多个变量,这可以方便地用来从函数返回多个值。它们可以自动处理数据类,可以通过给自己的类定义名为componentN 的函数来支持。

委托属性可以用来重用逻辑,这些逻辑控制如何存储、初始化、访问和修改属性值,这是用来构建框架的一个强大的工具。

lazy 标准库函数提供了一种实现惰性初始化属性的简单方法。

Delegates.observable 函数可以用来添加属性更改的观察者。

委托属性可以使用任意m ap 来作为属性委托,来灵活来处理具有可变属性集的对象。


8

函数类型可以让你声明一个持有函数引用的变量、参数或者函数返回值。

高阶函数以其他函数作为参数或者返回值。可以用函数类型作为函数参数或者返回值的类型来创建这样的函数。

内联函数被编译以后,它的字节码连同传递给它的lambda 的字节码会被插入到调用函数的代码中,这使得函数调用相比于直接编写相同的代码,不会产生额外的运行时开销。

高阶函数促进了一个组件内的不同部分的代码重用,也可以让你构建功能强大的通用库。

内联函数可以让你使用非局部返回一一在lambda 中从包含函数返回的返回表达式。

匿名函数给lambda 表达式提供了另一种可选的语法,用不同的规则来解析return 表达式。可以在需要编写有多个退出点的代码块的时候使用它们。


9

Kotlin 的泛型和Java 相当接近:它们使用同样的方式声明泛型函数和泛型类。

和Java 一样,泛型类型的类型实参只在编译期存在。

不能把带类型实参的类型和is 运算符一起使用,因为类型实参在运行时将被擦除。

内联函数的类型参数可以标记成实化的,允许你在运行时对它们使用is 检查,以及获得java.lang.Class 实例。

变型是一种说明两种拥有相同基础类型和不同类型参数的泛型类型之间子类型化关系的方式,它说明了如果其中一个泛型类型的类型参数是另一个的类型参数的子类型, 这个泛型类型就是另外一个泛型类型的子类型或者超类型。

可以声明一个类在某个类型参数上是协变的,如果该参数只是用在out 位置。

逆变的情况正好相反:可以声明一个类在某个类型参数上是逆变的,如果该参数只是用在in 位置。

Kotlin 中的只读接口List 声明成了协变的,这意味着List<String >是List <Any > 的子类型。

函数接口声明成了在第一个类型参数上逆变而在第二个类型参数上协变,使(Animal)- >Int 成为( Cat )一> Number 的子类型。

在Kotlin 中既可以为整个泛型类指定变型(声明点变型) ,也可以为泛型类型特定的使用指定变型(使用点变型)。

当确切的类型实参是未知的或者不重要的时候,可以使用星号投影语法。


10

Kotlin 中应用注解的语法和Java 几乎一模一样。

在Ko ti in 中可以让你应用注解的目标的范围比Java 更广,其中包括了文件和表达式。

一个注解的参数可以是一个基本数据类型、一个字符串、一个枚举、一个类引用、一个其他注解类的实例,或者前面这些元素组成的数组。

如果单个Kotlin 声明产生了多个字节码元素,像@ get : Rule 这样指定一个注解的使用点目标,允许你选择注解如何应用。

注解类的声明是这样的,它是一个拥有主构造方法且没有类主体的类,其构造方法中所有参数都被标记成val 属性。

元注解可以用来指定(使用点)目标、保留期模式和其他注解的特性。

反射API 让你在运行时动态地列举和访问一个对象的方法和属性。它拥有许多接口来表示不同种类的声明,例如类( KClass )、函数( KFunctio 川等。

要获取一个KClass 的实例,如果类是静态己知的,可以使用

ClassName::class :否则,使用obj.javaClass . kotlin 从对象实例

上取得类。

KFunction 接口和KProperty 接口都继承了KCallable ,它提供了一个通用的call 方法。

KCallable. callBy方法能用来调用带默认参数值的方法。

KFunction0 、KFunctionl1等这种不同参数数量的函数可以使用invoke方法调用。

KProperty0 和KProperty1是接收者数量不同的属性,支持用get 方法取回值。KMutablePropertyO 和KMutablePropertyl 继承了这些接口,支持通过set 方法来改变属性的值。


11

内部DSL 是一种API 设计模式,借助由多个方法调用组成的结构,可以使用这种模式来构建更表意的A PI 。

带接收者的lambda 采用嵌套结构,来重新定义在lambda 函数体中方法应该如何解析。

用作(调用函数)参数的带接收者的lambda ,其类型是扩展函数类型, 井且这个调用函数在调用lambd a 时会为它提供一个接收者实例。

使用Kotlin 内部DSL 而不是外部模板或标记语言的好处是可以重用代码井创建抽象。

使用特殊命名的对象作为中缀调用的参数,允许你创建读起来就像英语的DSL ,而且不带额外的标点符号。

在基本数据类型上定义扩展让你能够为各种字面值(比如日期)创建可读的语法。

使用invoke 约定,可以把任意对象当成函数一样调用。

kotlin . html 库提供了用来构建HTML 页面的内部DSL , 并且很容易扩展,用来支持各种前端开发框架。

kotlintest 库提供的内部DSL , 支持在单元测试中使用可读断言语句。

Exposed 库提供了使用数据库的内部DSL 。

Anko 库为Android 开发提供了各种工具,包括用来定义山布局的内部DSL 。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354