我的第一本书
文章平均质量分 81
潺森
勿在浮沙筑高台,点滴积累汇聚江河。让梦想成为现实。
展开
-
2 Getting ready 准备工作
2 Getting ready 准备工作2.1 Android Studio写本文的时候,正是2017 Google IO 大会时期,发布了android studio 3.0 Canary 1 版本,正式全面支持kotlin 作为正式编程语言。 旧版本的Android Studio 的可以使用插件的方式来支持kotlin。这里介绍的是3.0 版本的Android Studio。Android St原创 2017-05-23 08:49:26 · 363 阅读 · 0 评论 -
Kotlin学习之-4.3.4 返回和中止循环
Kotlin学习之-4.3.4 返回和中止循环Kotlin 有3中结构化的跳转语句:return,默认是从最近的函数或者匿名函数中中返回。break,中止最近的循环continue,从当前的循环中继续执行下一次循环所有这些表达式都可以被用来组成更大的表达式val s = person.name ?: return基于标签的break 和continueKotlin中的任何表达式都可以被 标记原创 2017-06-09 15:09:42 · 4053 阅读 · 0 评论 -
Kotlin学习之-5.13 代理属性
Kotlin学习之-5.13 代理属性有一些常见的属性,尽管我们可以每次需要他们的时候手动实现他们,但是最好还是可以实现一次然后随处可用,并把它放到库里。 这些例子包括:懒加载属性:属性值会在第一次访问的时候被计算可观察的属性:监听器会得到属性变化的通知存储在map中的属性,而不是单独给每个属性一个单独的变量为了覆盖这些情况,Kotlin支持代理属性class Example { v原创 2017-07-11 20:14:22 · 842 阅读 · 0 评论 -
# Kotlin学习之-6.1 函数
函数和lambda表达式Kotlin学习之-6.1 函数函数定义Kotlin中函数使用关键字fun定义的fun double(x: Int) : Int { return 2*x}函数的使用调用函数使用传统的方式:val result = double(2)调用成员函数使用点操作符// 创建Sample类的实例并调用foo函数Sample().foo()内建注解函数调用也可以使用内建注解原创 2017-07-12 09:43:50 · 774 阅读 · 0 评论 -
Kotlin学习之-5.1 类和继承
Kotlin学习之-5.1 类和继承类Kotlin中类定义使用关键字classclass Invoice {}定义一个类需要包括类名,类头(包括它的类型参数,主构造函数等等)和类主体包含在成对的花括号。 类头和类主体是可选的, 如果类没有类主体,那么花括号也可以省略class Empty构造函数Kotlin中的类可以有一个主要的构造函数和多个次要构造函数。主要构造函数是类头的一部分,它直接跟在类名原创 2017-06-12 09:26:58 · 892 阅读 · 0 评论 -
Kotlin学习之-5.2 属性和成员
Kotlin学习之-5.2 属性和成员定义属性Kotlin中,类可以有属性。它们既可以用var关键字定义成变量,也可以用val关键字定义成只读量。class Address { var name: String = ... var street: String = ... var city: String = ... var state: String? = ...原创 2017-06-12 15:30:43 · 677 阅读 · 0 评论 -
Kotlin学习之-6.2 高阶函数和lambda表达式
Kotlin学习之-6.2 高阶函数和lambda表达式高阶函数一个高阶函数是一个接受函数作为参数,或者返回一个函数。一个高阶函数的例子是lock()函数,它接受一个锁对象和一个函数,获取锁,运行函数,然后释放锁。fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { return body()原创 2017-07-13 09:45:47 · 1502 阅读 · 0 评论 -
Kotlin学习之-5.8 泛型
Kotlin学习之-5.8 泛型和Java中一样,Kotlin 也可以使用类型参数:class Box<T>(t: T) { var value = t}一般情况下,要创建这样的类的实例,我们需要提供类型参数:val box: Box<Int> = Box<Int>(1)但是如果参数的类型可以推断出来,例如,从构造器的参数或者其他方法可以推断出类型,这种情况下可以神略类型参数:val bo原创 2017-07-04 15:45:52 · 828 阅读 · 0 评论 -
Kotlin学习之-5.9 内部类
Kotlin学习之-5.9 内部类类可以嵌套在其他类中:class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2内部类一个类可以被标记成inner来表示可以访问外部类的成员。内部类持有一个对外部类的原创 2017-07-05 09:19:47 · 473 阅读 · 0 评论 -
Kotlin学习之-5.10 枚举类
Kotlin学习之-5.10 枚举类使用枚举类最基本的方法是实现类型安全的枚举:enum class Direction { NORTH, SOUTH, WEST, EAST}每一个枚举常量都是一个对象。枚举常量使用逗号分隔开初始化由于每个枚举都是一个枚举类的实例,所以他们可以被初始化:enum class Color(val rgb: Int) { RED(0xFF0000),原创 2017-07-05 10:00:52 · 555 阅读 · 0 评论 -
Kotlin学习之-5.3 接口
Kotlin学习之-5.3 接口Kotlin中的接口和Java 8中的接口很接近。它们可以定义抽象函数,也可以实现。和抽象类的区别在于接口不能存储状态。接口可以拥有属性,但是这些属性必须是抽象的或者提供访问方法的实现。接口使用关键字interface 来定义interface MyInterface { fun bar() fun foo() { // 可选的函数主原创 2017-06-14 08:47:04 · 413 阅读 · 0 评论 -
Kotlin学习之-5.11 对象表达式和声明
Kotlin学习之-5.11 对象表达式和声明有时候我们需要创建一个类的实例,并且扩展或者修改其中的一两个方法,但不想显式地声明一个子类。Java中是使用内部类来处理这种情况,Kotlin则使用对象表达式和对象声明扩展了这种概念。对象表达式创建一个内部类的对象,并且继承某些类型,我们这么写:window.addMouseListener(object: MouseAdapter() { ov原创 2017-07-05 14:53:44 · 701 阅读 · 0 评论 -
Kotlin学习之-6.3 内联函数
Kotlin学习之-6.3 内联函数使用高阶函数会带来一些运行时的代价:每个函数都是一个对象,并且会捕获一个必报,例如,那些在函数体中访问的变量。会带来内存分配(对函数对象和类对象)和虚拟调用引入的额外开销但是大多数情况下这种类型的开销可以使用内联lambda表达式来消除。下面展示的函数就是这种情况下很好的例子。例如,lock()函数可以很容易的做成内联的。考虑如下用例:lock(l) { foo(原创 2017-07-14 09:49:29 · 473 阅读 · 0 评论 -
Kotlin学习之-5.12 代理模式
Kotlin学习之-5.12 代理类代理代理模式已经被证明是一种很好的替代实现继承的方式,并且Kotlin原生支持代理模式还不需要任何多余代码。一个类Derived可以从一个接口Base继承并且代理所有他的共有方法到一个特定的对象上。interface Base { fun print()}class BaseImpl(val x: Int) : Base { override f原创 2017-07-06 09:22:41 · 562 阅读 · 0 评论 -
Kotlin学习之-5.4 可见性描述符
Kotlin学习之-5.4 可见性描述符类,对象,接口,构造函数,函数,属性以及他们的setter可以用可见性描述符来修改其可见性。getter方法的可见性通常和属性的可见性一致。Kotlin中有4中可见性描述符:private, protected, internal和public。如果没有显示写描述符,那么默认可见性是public 的。下面是各种不同定义范围的解释。包函数,属性和类,对象和接口可原创 2017-06-28 09:12:17 · 542 阅读 · 0 评论 -
Kotlin学习之-5.7 封装类
Kotlin学习之-5.7 封装类封装类是用来表示严格的类层级,当一个值可以是一个类型集合中的任意一个,而不是其他类型时。他们的相当于是枚举类的扩展,对于每一个枚举类型的值得集合也是严格定义的,但是每一个枚举常量有且仅有一个单例,这样一个封装类的子类可以有多个包含状态的实例。要声明一个封装类,需要在类名前面用sealed描述符标识。一个封装类可以有子类,但是他们必须全部都和封装类定义在同一个文件里。原创 2017-06-30 09:43:40 · 897 阅读 · 0 评论 -
Kotlin学习之-4.3.3 控制流
Kotlin学习之-4.3.3 控制流if 表达式Kotlin中,if 是一个表达式,他会返回一个值。 因此没有三元操作符(condition ? then : else), if表达式可以很好的表达这样的功能。// 普通用法var max = aif (a < b) max = b// 带else 的表达式var max: Intif (a > b) { max = a} els原创 2017-06-09 10:24:59 · 763 阅读 · 0 评论 -
1 Introduction To Kotlin
1 Kotlin 简介1.1 What is Kotlin?Kotlin 是一种新的语言,2010年开始发布,由JetBrain 领导开发,后来被Google 资助,发布到Apache的开源许可下,正式版1.0 是在2016年2月发布,目前最新版本是2017年4月25日发布的v1.1.2-2, 免费,开源。 吸收了很多现代语言的特性,相比Java来说,语法更简介,支持很多新的语言特性,函数式编程,高原创 2017-05-23 09:13:55 · 528 阅读 · 0 评论 -
10.1 Converting json to data classes
10.1 Converting json to data classes处理json数据,是常见的工作,解析和处理json技术含量低,考验的是细心和耐心,原始的办法的就是对着json字符串一个一个的解析,一般做法是用gson 或jackson 等转换工具,辅助json的解析。 这里介绍一个直接把json串转成java 代码的工具和使用方法,可以提高生产效率,减少人工手误出错。10.1.1 JavaG原创 2017-05-24 09:35:55 · 828 阅读 · 0 评论 -
3 创建一个kotlin新工程
创建一个kotlin工程在Android Studio中创建一个新工程在Android Studio 3.0 中,相比创建一个java工程来说, 创建一个kotlin工程只是多点一下,选中Include Kotlin Support 即可, 其他步骤和创建java 工程是一样的。 1. 在Android Studio 中 点击File -> New -> New Project 或者在欢迎页向导窗原创 2017-05-25 09:41:58 · 910 阅读 · 0 评论 -
4.1 Java语言和Kotlin语言对比(2) 泛型和数组
4.1 Java语言和Kotlin语言对比(2) 注意Java中基础类型的装箱类型当用作类型参数时被映射成了平台类型。 例如,List<java.lang.Integer> 在Kotlin中被映射成List<Int!> 集合类型在Kotlin中有可能是只读或者不可变的,所以Java的集合类型被映射如下:(本表中的所有Kotlin类型都在包kotlin.collections下) Ja原创 2017-05-31 10:28:38 · 1666 阅读 · 0 评论 -
4.1 Java语言和Kotlin语言对比(1)-基础类型
4.1 Java语言和Kotlin语言对比(1)void类型的映射Java中返回void类型,对应的Kotlin返回Unit。Java中特殊标识的转义有些Kotlin定义的关键字,是Java中的合法标识名,例如in, object, is etc。如果Java库使用一个Kotlin的关键字作为函数名,可以转义之后再调用改函数,转义时添加 bracktick(`)字符foo.`is`(bar)空指针原创 2017-05-26 10:23:53 · 749 阅读 · 0 评论 -
4.2 Kotlin 语法精简版(2)
4.2 Kotlin 语法精简版(2)创建数据对象(POJOs/POCOs)data class Customer(val name: String, val email: String)提供一个Customer类,有下列功能:getters 给所有的属性(setters 如果有变量的话vars)equals()hasCode()toString()copy()原创 2017-06-05 07:10:55 · 395 阅读 · 0 评论 -
4.1 Java语言和Kotlin语言对比(3)
Java 变长参数varargsJava类有一些方法定义时会使用不定长度的参数public class JavaArrayExample { public void removeIndicesVarArg(int... indices) { // code here... }}在这种情况下,需要使用扩展操作符(*)来传递参数IntArrayval javaObj =原创 2017-06-01 09:34:31 · 1022 阅读 · 0 评论 -
Kotlin 安卓开发
Kotlin for Android DevelopersI. About this book II. Is this book for you? III. About the author 1 Introduction 1.1 What is Kotlin? 1.2 What do we get with Kotlin? 2 Getting ready 2.1 Android Stu原创 2017-05-22 17:54:27 · 741 阅读 · 0 评论 -
4.2 Kotlin 语法精简版(1)
定义包定义包应该在源文件的最上面,这和Java一样。package my.demoimport java.util.*// ...但是Kotlin不要求文件夹和包名对应,源文件可以在文件系统中的任意的路径下。定义函数定义函数使用fun关键字, 既是’function’的简写,也是’fun’ 高兴,好玩的意思,一语双关。 两个Int参数 和Int返回值的函数fun sum(a: Int, b: In原创 2017-06-02 00:14:08 · 628 阅读 · 0 评论 -
Kotlin学习之-4.3 基础类型
4.3 基础类型Kotlin中,所有都是对象是因为我们可以调用任何对象的成员函数和属性。有一些类型是内建的,因为这些类型的实现是优化过的,但是使用的时候看起来和普通类是一样的。本节中我们将介绍这些类型:数据类型,字符类型,布尔类型和数组。(number, character, boolean 和array)数据类型 numbersKotlin中处理数据类型和Java方法很类似,但也不完全一样。例如,原创 2017-06-07 17:54:29 · 907 阅读 · 0 评论 -
Kotlin学习之-5.5 扩展
Kotlin学习之-5.5 扩展Kotlin 与C# 和Gosu 类似,提供了无需必须继承类,或者使用装饰器模式来扩展类功能的能力。这是通过一种叫做扩展的extension特殊的声明来实现的。Kotlin支持扩展方法和扩展属性。扩展方法声明一个扩展方法,我们需要在它的名字前面加上一个接收类型前缀,例如,加上一个被扩展的类型。如下示例给MultableList<Int>添加了一个swap方法:fun原创 2017-06-28 20:28:26 · 668 阅读 · 0 评论 -
# Kotlin学习之-5.6 数据类
Kotlin学习之-5.6 数据类我们经常创建一个类只是用来持有数据,不做其他事情。在这样的类中,一些标准的功能是机械地从数据中衍生出来的。在Kotlin中,这样的类叫做数据类,用data标识:data class User(val name: String, val age: Int)编译器会在主构造器中,自动给定义的所有属性都派生如下的成员:equals/hashcode() toStrin原创 2017-06-29 10:11:44 · 594 阅读 · 0 评论 -
Kotlin学习之-4.3.2 包管理
Kotlin学习之-4.3.2 包管理Kotlin源文件是以包定义开头的:package foo.barfun baz() {}class Goo() {}// ...所有源文件中的的内容包括类和函数都在定义的包中。所以在上面的例子中,函数baz()的全名是foo.bar.baz, 类Goo的全名是foo.bar.Goo。 如果包没有定义,那么源文件的内容将全部属于”默认”包下, 该”默认”原创 2017-06-08 20:07:54 · 776 阅读 · 0 评论 -
Kotlin学习之-6.4 Coroutines
Kotlin学习之-6.4 Coroutines 在Kotlin V1.1中Coroutines 还处在实验阶段有些接口会做一些耗时的操作例如网络IO请求,文件IO, CPU或者GUP密集的工作等,并且要求调用者阻塞知道操作完成。Coroutines提供了一种能够替换避免阻塞线程的方法并且代价更小、控制性更好的操作:suspension of a coroutineCoroutines通过把复原创 2017-07-21 09:24:31 · 2729 阅读 · 0 评论