本页面是为了《Kotlin核心编程》这本而构建的,主要讨论和该书中涉及的相关技术和勘误说明,也欢迎任何关于本书内容的讨论,谢谢!

《Kotlin核心编程》已经由机械工业出版社于2019年05月出版,水滴技术团队是该书的作者团队,请大家支持,也请批评指教 ^_^

如果您喜欢Kotlin,可以在各大购书网站搜索“Kotlin核心编程”来购买

您也可以考直接通过如下的任何一个链接去了解或购买该书:

当当网:http://product.dangdang.com/27859545.html

京东:https://item.jd.com/12519581.html

书评在豆瓣:https://book.douban.com/subject/33419618/

深度书评

延伸阅读

勘误

我们对由于不严谨、稿件版本等原因导致的错别字、代码、格式等问题表示抱歉,会在新版次印刷前进行订正。

版次(2019 年 4 月第 1 版第 1 次印刷)














































































































































页码 原文 改为
39 "kot" >= "abc" && "abc" <= "xyz" "kot" >= "abc" && "kot" <= "xyz"
56 internal public Bird internal class Bird
60 若要继承…抽象类实现的。 若要继承该类则需要将子类定义在同一个文件中,其他文件中的类将无法继承这个类。但这种方式有一定的局限性,即密封类不能被初始化,因为它背后是基于一个抽象类实现的。
64 I am run very fast I can run very fast
66 fun kind() = "flying animals"(Flyer接口中) fun kind() = "[Flyer] flying animals"
66 fun kind() = "flying animals"(Animal接口中) fun kind() = "[Animal] flying animals"
127 ?Any?是?Any的父类型 Any?是Any的父类型
130
1
2
3
fun sum(a: Int, b: Int) {
return a + b
}


1
2
3
fun sum(a: T, b: T) {
return a + b
}



1
2
3
fun sum(a: Int, b: Int): Int {
return a + b
}


1
2
3
fun sum(a: T, b: T): T {
return a + b
}


130
能不能将参数的类型也参数化呢?比如:

能不能将参数的类型也参数化呢?比如以下伪代码:
142 public interface List<? extends T> { ... } List<? extends Object> list = new ArrayList<String>();
144
dest: Array<Double>

dest: Array<Double?>
145
dest: Array<T>

dest: Array<T?>
198
1
2
3
fun toMap(a: User): Map<String, Any> = {
hashMapOf("name" to name, "age" to age)
}



1
2
3
fun toMap(a: User): Map<String, Any> {
return hashMapOf("name" to a.name, "age" to a.age)
}


199 fun <A : Any> toMap(a: A): Map<String, Any?> = { ... } fun <A : Any> toMap(a: A): Map<String, Any?> { return ... }
199 素据 数据
206 Succ::class.declaredMemberExtensionFunctions.map{it.name} Nat::class.declaredMemberExtensionFunctions.map{it.name}
206 Nat::class.declaredMemberExtensionProperties Nat::class.declaredMemberExtensionProperties.map{it.name}
207 缺乏必要的Person类 KMutablePropertyShow函数上方增加 data class Person(val name: String, val age: Int, var address: String)
211 Sourc。 Source。
211 RUNTIM。 RUNTIME。
254
1
2
3
4
5
f1 :: Int -> Int -> Int
f1 x y = x + y

f2 :: Int -> Int
f2 x = x



1
2
3
4
5
f1 :: Int -> Int -> Int
f1 x y = x

f2 :: Int -> Int
f2 x = f2 x


254
1
f1(1(f2(2)))


1
f2(2)



1
f1 1 (f2 2)


1
f2 2


293
没有synchronized,

没有synchronized关键字,
294
1
2
3
4
5
6
7
8
9
10
fun <T> withLock(lock: Lock, action: () -> T): T {
lock.lock()
try {
return action()
} catch (ex:Exception) {
println("[Exception] is ${ex}")
} finally {
lock.unlock()
}
}



1
2
3
4
5
6
7
8
fun <T> withLock(lock: Lock, action: () -> T): T {
lock.lock()
try {
return action()
} finally {
lock.unlock()
}
}


299
这个这个方案

这个方案
289
两段代码

分别替换为:
1
2
3
4
5
6
7
8
9
10
import kotlinx.coroutines.experimental.*

fun main(args: Array<String>) {
GlobalScope.launch { // 在后台启动一个协程
delay(1000L) // 延迟一秒(非阻塞)
println("World!") // 延迟之后输出
}
println("Hello,") // 协程被延迟了一秒,但是主线程继续执行
Thread.sleep(2000L) // 为了使 JVM 保活,阻塞主线程 2 秒钟(这段代码删掉会出现什 么情况?)
}


1
2
3
4
5
6
7
8
9
10
import kotlinx.coroutines.experimental.*

fun main(args: Array<String>) = runBlocking {
GlobalScope.launch {
delay(1000L)
println("World!")
}
println("Hello,")
delay(2000L)
}


252
在消除了副作用了之后

在消除了副作用之后

感谢

感谢在本页面留言的读者,为《Kotlin核心编程》提出了诸多勘误和改进意见,尤其感谢 ID 为「那时花开」的朋友,系统整理了此书在各个章节存在的不少排版问题。