但——它有啥用啊? Nothing 的本质 大家好,我是扔物线朱凯。上期讲了 Kotlin 的 Unit,这期讲 Nothing。...;并且在源码里 Kotlin 也没有帮我们创建它的实例。...} } 在这个函数里,一个 if 判断,true 就返回,false 就抛异常,这个写法很常见吧?它在 else 的这个分支,是不是就只抛异常而不返回值了?...一个元素类型为Nothing 的 List,将会导致我无法找到任何的元素实例来填充进去,但是这个 List 本身是可以被创建的: val emptyList: List = listOf...,你利用 Nothing 可以创建出一个通用的「空白」对象,它什么实质内容也没有,什么实质工作也做不了,但可以用来作为泛型变量的一个通用的空白占位值。
Kotlin 是一门完全面向对象(Object Oriented)的语言。在Kotlin中一切皆是对象。所有对象皆继承自Any(类似Java中的所有对象的祖先类Object)。...Kotlin 处理数字在某种程度上接近 Java,但是并不完全相同。例如,对于数字没有隐式拓宽转换( Java 中 int 可以隐式转换为long),另外有些情况的字面值略有不同。...当然,从编译器的角度,完全可以通过字符数的多少来判断是char类型还是String类型。 同时,Kotlin与Java不同的是,它不能直接去应用一个Number类型。...库函数 arrayOfNulls() (初始化值为null),emptyArray(其实现是(arrayOfNulls(0) as Array)) 可以用于创建一个指定大小、元素都为空的数组...然而,如果当你调用List的一些函数来返回T的话,你将会得到一个Object,而不是String。
在 Kotlin 语言中有两个由编译器定义的特定标识符,它们只能在特定场景中使用有特定的作用,而在其他的场景中可以做标识符使用。...= 0 Kotlin声明语句是“变量名”:“变量类型”,而不是Java常见的“变量类型 变量名”这种格式,在这里你会惊奇的发现Kotlin与Java正好相反,Kotlin声明完毕无需分号,直接回车即可...(0,text.indexOf(".")) } split方法的使用,在java中split返回的是Sting数组,但是在Kotlin中split返回的则是Sting类型的队列,List...size 对于如何获取指定位置的数组元素,Java通过方括号加下标来获取,比如intarray[0] 获取数组中的第一个元素。...就是一个可空类型,这种类型可以接受Int值和null;而Int类型只能接收Int值不能接受null。
上一篇文章介绍了基本变量类型在Kotlin中的用法,不过这只针对单个变量,如果要求把一组相同类型的变量排列起来,形成一个变量数组,那又该如何声明和操作呢?...但在Kotlin中,声明并赋值一个整型数组的语句是下面这样的: var int_array:IntArray = intArrayOf(1, 2, 3) 两相对比,对于整型数组的声明,Java...要想在Kotlin中声明字符串数组,得使用Array,也就是把String用尖括号包起来;同时,分配字符串数组的方法也相应变成了arrayOf,具体代码如下所示: var string_array...,常见的处理包括获取数组长度、获取指定位置的数组元素等等,这些功能在Java与Kotlin之间的区别包括: 关于获取数组长度,Java使用.length,而Kotlin使用.size。...关于获取指定位置的数组元素,Java通过方括号加下标来获取,比如“int_array[0]”指的是得到该数组的第一个元素;Kotlin也能通过方括号加下标来获取指定元素,不过Kotlin还拥有get和set
字符 字符是 Kotlin 中的一种数据类型。 字符对应的类型关键字为Char。 字符的值只能包含一个值。 字符的值必须包含在''单引号里。...val char1: Char = 'AB' val char2: Char = 'CD' 字符串 String 在开发中使用非常频繁。 Kotlin 中字符串类型是String。...String 用""表示。 定义与使用 单行字符串。 val str = "Hello Kotlin" 多行字符串。 """ 静夜思 唐•李白 床前明月光,疑是地上霜。 举头望明月,低头思故乡。...Kotlin 使用Array表示数组,是一个泛型集合类型(泛型后面会讲,现在可理解为指定数组里面放什么类型的数据)。 定义与使用 使用Array表示数组的类型。...数组中的元素由,隔开。 使用arrayOf创建。
这里的“等于”号简单说明如下: 等于符号 功能说明 = 赋值,在逻辑运算时也有效 == 等于运算,比较的是值,而不是引用 === 完全等于运算,不仅比较值,而且还比较引用,只有两者一致才为真 另外,Java...CharArray DoubleArray FloatArray IntArray LongArray ShortArray 3.2 可空类型 我想Java和Android开发者肯定早已厌倦了空指针异常...Kotlin自然也不例外。 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。...,我们用Unit来表示这个特征,而不是null。...Goo null >>> goo as Foo Line71$Goo@73dce0e6 我们可以看出,在Kotlin中,父类是禁止转换为子类型的。
3 示例 首先我们还和以前一样,创建一个Android项目,自动创建一个Activity之后我们再创建一个java类: 那上面的代码如果用kotlin实现是什么样子呢。...我们由一个简单的"Hello World!"输出程序开始。与新建java文件类似,如下图,我们选择Kotlin File/Class.创建一个Kotlin文件。...我们也可以这样写var str= ""省略了生命变量类型,它可以根据赋的值而自动推断出类型。...在Kotlin中表达式也可以作为函数体,编译器可以推断出返回类型,可以简化为 为了更好理解表达式可以作为函数体,我们可以创建一个函数获取两个数的最大值,如下: 需要注意的是若if后有多个表达式,如下...的简洁性,我们创建一个Staff类,有String类型的name,position和泛型T(使用泛型仅仅是为了在Kotlin中接触以下泛型) java实现代码: Kotlin数据类: 通过对比我们就看出了优点了
在 Kotlin 中方法参数是一个值,所以你不能改变 num 参数。这是好的语言设计,因为你不应该改变方法的参数。但是你可以用相同的名称定义另一个变量,并按照你想要的方式初始化。...我是面向对象的,而静态成员不是面向对象的,” Kotlin回答。 “好吧,但我需要用于 MyClass 日志记录器,该怎么办?” “没问题,可以使用伴生对象。” “伴生对象是什么鬼?”...“它是与类绑定的一个单例对象。你可以把日志记录器放在伴生对象中,” Kotlin 如此解释。 “明白了。是这样吗?”...“嗯……是的,但是它不是静态成员!它只是一个对象。可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。”...: 0 } 可以吗?是的,但并不是这么简单。上面的代码可能会出错,从 parseInt() 中抛出 NPE。
,以满足由Java方法填充的所有Kotlin变量。 ? 类字面量 ? 在使用Log4j或Gson之类的Java库时,类字面量是很常见的。 在Java中,我们用.class后缀来写类名: ?...我是面向对象的,而静态成员不是面向对象的,” Kotlin回答。 “好吧,但我需要用于 MyClass 日志记录器,该怎么办?” “没问题,可以使用伴生对象。” “伴生对象是什么鬼?”...“它是与类绑定的一个单例对象。你可以把日志记录器放在伴生对象中,” Kotlin 如此解释。 “明白了。是这样吗?” ? “对!...“嗯……是的,但是它不是静态成员!它只是一个对象。可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白吗?这很简单。”...通常,在使用 Optional 时,你会先进行一系列空安全的转换,最后来处理空值。 比如在 Java 中: ? 在 Kotlin 中也没问题,使用 let 功能: ? 可以吗?
没有空洞的数组往往表现得更好 在大多数编程语言中,数组是连续的值序列。在 JavaScript 中,Array 是一个将索引映射到元素的字典。...空洞的默认值一般不会是元素的初始“值”。常见的默认值是零。 在 `Array` 构造函数后面加上 `.fill()` 方法 .fill()方法会更改当前的 Array 并使用指定的值去填充它。...(arr, [0, 0, 0]); 这一次,我们创建并填充了一个数组,同时里面没有出现漏洞。...我的侧重点是可读性,而不是性能。 你是否需要创建一个空的数组,以后将会完全填充? 1new Array(LEN) 你需要创建一个用原始值初始化的数组吗?...1new Array(LEN).fill(0) 你需要创建一个用对象初始化的数组吗? 1Array.from({length: LEN}, () => ({})) 你需要创建一系列整数吗?
此外,我们非常期待通过双方的努力,为 Kotlin 语言创建一个非营利基金会以便进行后续的开发。 Kotlin 是开源语言吗?...我可以在 Kotlin 中调用 Android 或其他 Java 语言库的 API 吗? 可以。Kotlin 与 Java 语言具有互操作性。...我可以在同一个项目中同时使用 Java 文件和 Kotlin 文件吗? 可以。...我可以在 Kotlin 代码中使用 C++ 代码吗? 可以,Kotlin 完全支持 JNI。您只需使用 external 修饰符标记 JNI 方法即可。...Kotlin 在 Android 开发中能实现协程吗?能实现异步/等候吗? Kotlin 协程目前应该可以实现,但这些特性还处于实验设计阶段。
他们的母语很糟糕,但是使用完全非母语的语言会导致与本地 API 交互的巨大复杂性。于是就创建了折衷的解决方案,比如用于 JavaScript 的 ES6 和用于 Java 的 Kotlin。...Kotlin 在 Android 开发人员中特别受欢迎,但你可以在任何可以使用 JVM 的地方使用它,而且现在真的很难找到使用“纯 Java”的正当理由。...我在代码库中包含了一个允许 ./run file.kt 的简短脚本。 斐波那契 我们需要一些类型注释,感觉它们应该是可推断的,但它们都是完全合理的代码。...通常我会问“你应该使用 Kotlin 吗”,但那是在向后看。...真正的问题是“你应该使用 Java”吗?答案是明确而明确的 NO!如果你需要在 JVM 上运行某些东西并与“Java”生态系统交互,那么你可以做到这一点,而无需触及语言的那个可悲的借口。
MyCAT 在实际处理时,只处理第一个返回的 记录头(header) 。因此,在使用时要保证表的 Schema 相同。...分片节点响应的 记录头(header) 可以直接返回 MySQL Client 吗?答案是不可以。AVG函数 是特殊情况,MyCAT 需要将 AVG 拆成 SUM + COUNT 进行计算。...欢迎订阅我的公众号噢)。...每个字段对应的值占用格子数 = 字段对应的值长度 / 8 Byte,如果无法整除再 + 1。 因为字段对应的值可能无法刚好占满每个格子,未使用的 bit 用 0 占位。...当然肯定的是,也不是这么“简单”的实现。 ?具体怎么实现的呢?我们在《MyCAT 源码解析 —— 分片结果合并(二)》继续分析。
因为Alice的年龄没有指定,Elvis运算符使用零代替了它,所以Bob幸运地成了年纪最大的人。 喜欢这样的代码吗 ? 继续读下去,你将会学习到更多,并成为一名Kotlin 专家。...其中最重要的概念是 Kotlin 对可空类型的支持,通过在编译期检测可能存在的 空指针异常,它让你可以写出更可靠的程序。 另一个 Kotlin 类型系统的新概念是对函数类型的支持。...lambda 表达式,让你用最少的样板代码方便地传递代码块 数据类,提供了创建不可变值对象的简明语法 标准库中包括了丰富的 API 集合,让你用函数式编程风格操作对象和集合 Kotlin 允许你使用函数式编程风格但并没有强制你使用它...这些应用通常并不是孤立地开发或者从零开始的,它们 几乎总是对现有的系统进行扩展、改进或者替换,新的代码必须和系统中现有部分进行集成,而这些部分可能很多年之前就写成了。...这个特性的一个最简单的用例就是 HTML 生成库,它可以把一个外部模板语言 替换成简洁且完全类型安全的解决方案。这里有一个例子: ?
,你可以把他理解为外部类自动创建了一个对象作为自己的field。...当然,扩展并不能真正的修改它所扩展的类。通过定义一个扩展,我们并没有在一个类中插入新的方法,仅仅是可以通过该类型的变量用点表达式来调用这个新函数。...完全兼容,与Java互操作 这是Kotlin与Scala相比,优势突出的一点。我们可以在Kotlin中调用现存的Java代码,并且也能在Java代码中顺利的调用Kotlin代码。...这意味着我们可以马上在现有的Java项目中使用上Kotlin,同时所有之前旧的Java也一样有效。 这是很关键,也是我之所以很看好Kotlin的一个原因。...作为一名开发者,在我眼里,Kotlin设计出来不是抛开Java谈的,而是在Java的毛病的基础上,进行的再开发,拥有很多其他语言优秀的特性,同时完全兼容Java。
Day 10:Data 类和 equality 可以创建具有一个具有处理数据的类吗?将它们标记为 "Data" 类。...Day 17:Lateinit Android 中,在 onCreate 或者其它的回调初始化对象,但在 Kotlin 中不为空的对象必须初始化。那么怎么办呢?可以输入 lateinit。...序列是迭代器的表亲,一次只能懒散地产生一个值。这在使用 map 和 fifter 时非常重要 - 它们将创建序列,而不是为每一步都复制列表! 您可以从列表中创建序列或指定下一个功能。...如果您永远不会终止一个序列,它可以是无限长的而不会耗尽内存。使用 Kotlin 中的协程您也可以使用生成器!...Android KTX 允许您使用默认参数在视图的一侧设置填充。一行代码可以节省很多代码!
这样我们就可以直接使用类型在较高层次的方式思考,而不是繁重的低层次实现。 例如,我们可以将字符串想成一个值,以此取代仅仅是字节的数组。字符串就是一个抽象数据类型。...函数 arrayOfNulls() 可以用于创建一个指定大小、元素都为空的数组。这个特殊的空数组在创建的时候,我们需要指定元素的类型。...Kotlin的类型系统和Java相比,首要的区别就是Kotlin对可空类型的显式支持。 在本节中,我们将讨论Kotlin中的可空类型。...,要时刻注意这一点:Integer的默认值是null而不是0。...Kotlin中的Unit类型实现了与Java中的void一样的功能。不同的是,当一个函数没有返回值的时候,我们用Unit来表示这个特征,而不是null。
哈哈,实际上你完全可以不用这么痛苦,用 Kotlin 替代 Java 开发你的程序,无论是 Android 还是 Server,你都能像之前写 Java 一样思考,同时又能享受到新一代编程语言的特性,说到这里你是不是开始心动了呢...从外观上,乍一看还以为是 Scala,我曾经琢磨着把 Scala 作为我的下一门语言,不过想想用 Scala 来干嘛呢,我又不做大数据,而它又太复杂了o(╯□╰)o 用Kotlin创建一个数据类 ?...3.2 空安全与属性代理 第一次见到空类型安全的设计是在 Swift 当中,那时候还觉得这个东西有点儿意思哈,一旦要求变量不能为空以后,因它而导致的空指针异常的可能性就直接没有了。...还是举个例子,我需要在 Activity 当中创建一个 View 的引用,通常我们在 Java 代码中这么写: ? 在 Kotlin 当中呢? ? 每次用 aTextView 都要加俩!...这活我干不了啦。。 不过用 Kotlin 的 Android 扩展插件,我们就可以这样: 先上布局文件: main.xml ? 在 Activity 中: ?
在 Kotlin 中, 方法的参数无法修改,因此在本例中你不能改变 num。这个设计很好,因为你不应该改变方法的输入参数。但是你可以用相同的名称定义另一个变量并对其进行初始化。...这个想法很好,在 Kotlin 中,类型默认不可为空。如果你需要添加一个可为空的类型,可以像下列代码这样: val a: String?...: 0) // fine, prints 0 那么是不是如果你同时拥有不可为空和可为空的变量,就可以避免 Java 中最常见的 NullPointerException 异常吗?...“这是局限到你的类的单独对象。把你的 logger 放在伴生对象中。”Kotlin解释说。 “我懂了。这样对吗?”...如今,Optional 是在 API 边界处理返回类型中的空值的非常流行的方式。 Kotlin 中没有 Optional 的等价物,所以你大概应该使用 Kotlin 的可空类型。
领取专属 10元无门槛券
手把手带您无忧上云