首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第7章 集合类第7章 集合类

这就是面向对象范式混合函数式编程自由乐趣吧! 本章将介绍Kotlin标准库集合类,我们将了解到它是如何扩展Java集合库,使得写代码更加简单容易。...Set 集 Set 集是最简单一种集合,它对象不按特定方式排序,只是简单把对象加入集合,就像往口袋里放一堆溜溜弹珠。 Set 集中没有重复对象。...Map 映射中存储每个对象都有一个相关关键字(Key)对象,关键字决定了 对象映射存储位置,检索对象时必须提供相应关键字,就像在字典查单词一样。关键字是唯一。...7.1.2 Kotlin 集合类继承层次 下面是 Kotlin 集合接口类图 ? Kotlin 集合类继承层次 其中各个接口说明如下表所示 接口 功能 Iterable 父类。..., b2, b3, b4], [c1, c2, c3, c4]] Kotlin还提供了一个 flatten() 函数,效果是把嵌套List结构“压平”,变成一层结构,代码示例如下 strlist.map

1.3K20

第4章 类与面向对象编程第4章 类与面向对象编程

第4章 类与面向对象编程 在前面的章节,我们学习了Kotlin语言基础知识、类型系统等相关知识。本章节以及下一章,我们将一起来学习Kotlin对面向对象编程以及函数式编程支持。...因此,每一个对象包含两部分:成员变量和成员方法成员方法可以改变成员变量值。 2.程序是对象集合,他们通过发送消息来告知彼此所要做事情,也就是调用相应成员函数。...当向某个对象发送消息(请求)时,这个对象便知道该消息目的(该方法实现已定义),然后执行相应代码。 我们经常说一些代码片段是优雅或美观,实际上意味着它们容易被人类有限思维所处理。...面向对象编程,一个理想对象应该是只暴露它抽象接口(纯表面, 无体积),其方法则扮演箭头角色。...Java 8 和Kotlin,接口可以实现一些通用方法。 接口是抽象类延伸,Kotlin跟Java一样,不支持同时继承多个父类,也就是说继承只能存在一个父类(单继承)。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第1章 Kotlin是什么第1章 Kotlin是什么

    } 上面的代码简单说明如下: 1.Kotlin包package使用跟Java基本相同。...数据类以极简方式创建POJO。 运算符重载相当简单。 快速方便地扩展内置类、自定义函数与属性。...很显然一个事实就是,跟用机器语言写层次结构代码相比,用编译语言写成层次结构代码接近于人一般思考时所用概念。...和汇编语言不同是,C语言语句和机器语言指令之间不再是简单一一对应关系,不过毫无疑问是,仍然有一种从C语言代码到机器语言代码映射关系,但是这种关系要比从汇编到机器语言之间关系要复杂多了。...Kotlin正是这么做。 3.静态变量(Static)。静态方法经常会导致需要显式定义接口,从而使得API更加复杂。

    1.3K21

    Kotlin 1.2 新增了哪些特性?

    平台项目 (实验性) 平台项目是 Kotlin 1.2 一个新实验性功能,允许你 Kotlin – JVM, JavaScript 和(将来)Native 上所支持目标平台之间重用代码。...弃用:枚举项嵌套类型 枚举项,由于初始化逻辑问题,定义一个不是内部类嵌套类型功能已经被弃用。 Kotlin 1.2 这将会引起警告,并将在 Kotlin 1.3 中报错。...弃用:改变只读属性 backing 字段 定义 getter 通过赋值 field = ......kotlin.text.Regex 类已成为可序列化类,现在可以可序列化层次结构中使用。... Kotlin 1.2 ,这将会报错,因此需要使用 JVM 1.8 来编译这些代码。 破坏性变更:平台类型 x.equals(null) 一致行为 映射到 Java 原语 (Int!

    2.8K10

    Kotlin 1.2 新增特性

    转自:开源中国 www.oschina.net/translate/whats-new-in-kotlin-12 平台项目 (实验性) 平台项目是 Kotlin 1.2 一个新实验性功能,允许你...这也使得可调用引用在你引用外部接收者成员 lambda 方便使用。...弃用:枚举项嵌套类型 枚举项,由于初始化逻辑问题,定义一个不是内部类嵌套类型功能已经被弃用。 Kotlin 1.2 这将会引起警告,并将在 Kotlin 1.3 中报错。...kotlin.text.Regex 类已成为可序列化类,现在可以可序列化层次结构中使用。... Kotlin 1.2 ,这将会报错,因此需要使用 JVM 1.8 来编译这些代码。 破坏性变更:平台类型 x.equals(null) 一致行为 映射到 Java 原语 (Int!

    2.8K70

    《Kotin 极简教程》第8章 函数式编程(FP)(1)第8章 函数式编程(FP)《Kotlin极简教程》正式上架:

    简单说,就是一句话:允许将子类类型指针赋值给父类类型指针。而我们OOP那么设计模式,其实就是OOP多态性约束规则下,对这些函数指针调用模式总结。...函数编程,我们有一个内置框架来开发更小简单一般化模块, 然后将它们组合在一起。 函数编程一些基本特点包括: 函数是"第一等公民"。...所以我们讲求工程实践性能Kotlin语言中, 古老而美丽理论,也许能够给我带来思想启迪,但是工程实践未必那么理想。 闭包(Closure) 闭包简单讲就是一个代码块,用{ }包起来。...因为Scheme 程序充满了一对对嵌套小括号,这些嵌套符号体现了最基本数学思想——递归。...Lambda类型, 然后通过E call(Object input)方法实现自调用,方法实现里有多处转型以及嵌套调用。

    1.5K20

    if else代码优化小技巧

    程序开发,if else是我们经常用到条件判断语句。程序逻辑,免不了会有各种条件判断,并根据结果执行对应逻辑。if else好处就是简单,可读性高。...解决方法将很长判断式封装成函数或者定义成宏,并以一个清晰表达意图名字命名,名字能够体现出业务意义。...这个例子只是嵌套了两层,就已经不容易读了。真实项目中这个问题严重,个人这是对代码 可读性差重要元凶。解决方法提前return。把一些场景提前return掉。...显式路由转发现象if else,还有种场景,if else只有单层,没有嵌套,功能上只是做路由转发作用,这种情况使用if else方式逻辑上也是很简单。...解决方法如果想要代码看起来更美观,可以做成隐式映射,隐式映射有两种方法:枚举和Map方式。

    11810

    还没自定义过 Gradle 插件要学了

    到这里,自定义 Gradle 插件最基本步骤就完成了,接下来就可以 Plugin#apply 方法开始你表演。 ---- 3....release 和 debug,我们可以 buildType 定义任意多个且任意名称类型,这个是如果实现呢?...1、定义类型 T: 类型 T 必须带有以 String name 为参数 public 构造函数。...插件调试 4.1 两个调试方法 开发插件过程一定需要调试,除了通过日志调试,我们也有断点调试需求。这里总结两个方法方法 1 虽然只支持调试简单执行任务,但已经能满足大部分需求,而且相对简单。...而方法 2 支持命令行添加参数。 方法 1(简单): 直接提供 Android Studio Gradle 面板调试功能,即可调试插件。

    1.9K20

    《Kotin 极简教程》第7章 面向对象编程(OOP)(1)第7章 面向对象编程(OOP)《Kotlin极简教程》正式上架:

    当向某个对象发送消息(请求)时,这个对象便知道该消息目的(该方法实现已定义),然后执行相应代码。 我们经常说一些代码片段是优雅或美观,实际上意味着它们容易被人类有限思维所处理。...Kotlin类和接口跟Java对应概念有些不同,比如接口可以包含属性声明;Kotlin类声明,默认是final和public。 另外,嵌套类并不是默认在内部。...Kotlin成员可以包含: 构造函数和初始化块 属性 函数 嵌套类和内部类 对象声明 等。...我们可能直接简单地写成: class World1 { val yin: Int val yang: Int } Kotlin,直接这样写语法上是会报错: ?...,那么我们子类把它依然定义为抽象函数。

    1.1K20

    Kotlin 1.2 新特性

    比如说,如果你调用一个返回“T”泛型方法时,并将它返回值“T”转换为特定类型如“Foo”,编译器就会推断出这个方法调用“T”其实是“Foo”类型。...这也使得可调用引用在你引用外部接收者成员lambda方便。 弃用 Kotlin1.2版本也弃用了很多不合理东西。...弃用:枚举条目中嵌套类型 枚举条目中,inner class由于初始化逻辑问题,定义一个非嵌套类型已经被弃用了。这会在Kotlin 1.2引起警告,并将在Kotlin 1.3出错。...弃用:只读属性后台字段 field = …已经废弃了定义获取器中分配只读属性后台字段,Kotlin 1.2有警告,Kotlin 1.3有错误。...Java默认方法调用 Kotlin 1.2之前,接口成员针对JVM 1.6情况下重写Java默认方法会在超级调用上产生一个警告:Super calls to Java default methods

    1.7K100

    Kotlin 之美

    EJ 第1条:考虑使用静态工厂方法代替构造器 实例化对象方式,使用静态工厂方法相比构造器有几个好处: 工厂方法拥有名字,易于开发者理解。...Kotlin 访问权限设计彻底贯彻了使可访问性最小化准则。...原因很简单:如果直接暴露成员属性,将来想改变其内部实现是不可能,反之,如果是暴露方法,则可以方法轻易地修改实现。...其实很简单,将类定义为 final 类,退而求其次,如果类允许继承,则定义不允许重写方法为 final 方法。 既然这是个更好实践,为什么将其作为默认设计?...Kotlin 语法层面直接对该条款进行支持,静态成员类 Kotlin 称为『嵌套类』,默认内部类便是嵌套类,比如: class Outer { class Inner { // 默认便是静态成员类

    2.9K20

    Kotlin入门(15)独门秘笈之特殊类

    嵌套类 一个类可以单独代码文件定义,也可以另一个类内部定义,后一种情况叫做嵌套类,意即A类嵌套在B类之中。乍看过去,这个嵌套定义似乎与Java嵌套类是一样,但其实有所差别。...下面是Kotlin定义嵌套代码例子: class Tree(var treeName:String) { //类内部再定义一个类,这个新类称作嵌套类 class Flower (...数据类说神秘也不神秘,它定义代码极其简单,只要开发者class前面增加关键字“data”,并声明入参完整构造函数,即可无缝实现以下功能: 1、自动声明与构造入参同名属性字段; 2、自动实现每个属性字段...那么如果某个泛型函数类内部定义,即变成了这个类成员方法,又该如何定义它呢?...() } 总结一下,本文介绍了Kotlin六种特殊函数,首先嵌套类和内部类都定义某个外部类内部,区别在于能否访问外部类成员;其次枚举类和密封类都提供了有序枚举值集合,区别在于密封类定义更加严格

    1.3K30

    详解Android实现Redux方法

    Redux 架构基于一个严格单向数据流,应用所有数据都是通过组件一个方向上流动。Redux 希望确保应用视图是根据确定状态来呈现。...Actions:简单说 Actions 就是事件,包含要传递给 store 信息,表明我们希望怎样改变应用状态。...这样你就通常需要在一个状态变更响应中去进行另一个 store action 分发,而这很容易造成无限循环。 另一个原因是 store 架构是非常僵化,难以灵活改动。...保持应用状态层级尽可能少 因为 Redux state 是不可变,因此深层次嵌套 state 会产生很多样板代码,并且难以更新。...Kotlin 类似 data class,when 语句之类特性,能让你代码清晰很多。例如, Reducer 匹配 action 时,可以选择用 instanceof 方法实现。

    92820

    移除Kotlin代码感叹号(!!)

    空安全是Kotlin提供功能之一。它让你思考语言级别的可空性,所以你可以避免Java很常见NullPointerException。...① 使用val而不是var Kotlin让你在语言层面思考不可变性。val是只读,var是可变。建议你尽可能使用只读属性。它们是线程安全,并且函数式编程很好用。...这在Android很常见。对于这种情况,我们使用Kotlin提供lateinit。 !!写法 private var mAdapter: RecyclerAdapter?...let{uploadPhoto(it)} } ④ 创建全局函数来处理复杂内容 let是一个简单空检查替代品,但是会有复杂情况。如: if(name!=null&&address!...} 你可以嵌套两个let,但是可读性会很差。

    1.6K30

    Kotlin 程序设计》第十二章 Kotlin多线程

    现在你可以同一个文件任何地方定义一个密封类子类,而不只是以作为密封类嵌套方式。 数据类现在可以扩展其他类。... Kotlin 1.1 ,你可以限制这种情况,以使只有 td 隐式接收者上定义方法 会在传给 td lambda 表达式可用。...,但是没有一种简单方法来做相反操作:从映射中删除一个键采用不那么直接方式如 Map.filter() 或 Map.filterKeys()。...目前这并不改变字节码语义(特别是,接口和 lambda 表达式默认方法 生成与 Kotlin 1.0 完全一样),但我们计划在以后进一步使用它。...这些构件是 kotlin-stdlib 之上微小扩展,它们将它作为传递依赖项带到项目中。 字节码参数名 Kotlin 现在支持字节码存储参数名。

    3.3K10

    《Kotin 极简教程》第8章 函数式编程(FP)(2)

    有任何问题,欢迎随时与我交流~ ---- 8.2 Kotlin中使用函数式编程 好了亲,前文中我们函数式编程世界里遨游了一番,现在我们把思绪收回来,放到Kotlin函数式编程来。...为了让事情简单化(Java 8,增加Lambda表达式支持),我们Kotlin中使用普通函数来替代函数式接口。事实上,函数式编程函数,比C语言中函数或者Java方法都要强大。...list.filter((fun(x: Int): Boolean { return x % 2 == 1 })) 8.2.11 Lambda 表达式 我们也可以直接使用简单...使用Lambda表达式定义一个函数字面值: >>> val sum = { x: Int, y: Int -> x + y } >>> sum(1,1) 2 我们使用嵌套Lambda表达式来定义一个柯里化...我们将在下一章 中介绍Kotlin 轻量级线程:协程(Coroutines)相关知识,我们将看到Kotlin,程序逻辑可以协程顺序地表达,而底层库会为我们解决其异步性。

    1.8K20

    第10章 使用 Kotlin 创建 DSL第10章 使用 Kotlin 创建 DSL

    相对于传统API, DSL 更加富有表现力、符合人类语言习惯。 本章就让我们一起来学习一下 Kotlin DSL相关内容。...DSL 简单讲就是对一个特定问题 (受限表达能力) 方案模型更高层次抽象表达(领域语言),使其更加简单易懂 (容易理解语义以及清晰语义模型)。...,可以将foo.invoke()简写成foo(), kotlin 操作符是可以重载,()操作符对应就是类重载操作符函数 invoke。...而实际上Kotlin 对象实例上我们也可以像函数那样直接使用 () 操作符来调用这个类一个 invoke 操作符函数。用代码示例来说明可能会更加简单直接。...") Hello, Kotlin 这段代码 Hello 类定义了一个操作符函数invoke,然后我们声明了一个 Hello 类实例对象 hello, 接下来神奇事情发生了 hello("World

    1.3K20

    Kotlin 程序设计》第五章 Kotlin 面向对象编程(OOP)第五章 Kotlin 面向对象编程(OOP)1. 面向对象HelloWorld2. 面向对象编程思想简述3.Kotlin 面向

    逐渐地,产生了面向过程编程方法; 后来, 人们发现将数据和逻辑封装成对象, 接近于现实世界, 且容易维护大型软件, 又出现了面向对象编程语言和编程方法学, 增加了新语言特性: 继承、 多态、...也就是说, Kotlin 默认每个类都是不可被继承。这么做目的是为了程序运行性能。... Kotlin ,有private、protected、internal以及 public等四种修饰符,它们可用于修饰类、对象、接口、构造器、函数、属性、以及属性set方法等。...Kotlin继承抽象类,实现接口处理方式,跟Java一样,采用“单继承,实现”方式。...如果父类这个函数 open fun v() {} 没有标注open,则子类不允许定义同名函数,不论加不加override。 成员标记为override本身是开放,也就是说,它可以子类重写。

    1.5K30
    领券