Kotlin汇总1
来源:互联网 发布:淘宝有卖正品的吗 编辑:程序博客网 时间:2024/06/05 01:56
Android官方开始支持kotlin了,可以看下Android Announces Support for Kotlin。学习kotlin的优势是非常明显的,首先Android studio是基于intellij idea开发的,Google也开始把kotlin作为Android的标准开发语言。
对于Android开发者来说,学习kotlin是非常容易的事情,很平滑的过渡。旧代码Java新代码kotlin,是不是很神奇,而且学会了kotlin,可以做如下事情:
如果英文还行的话,可以直接通过官网学习,现在也有很多中文翻译过的学习。
当然kotlin和Java还是有些不一样的地方。写这篇博客也是给自己的学习过程,以节点的方式汇总。
kotlin是推断语言,可以通过推断a是Int类型。
var a = 3 // a被编译器自动推断为Int类型
直接自动转换类型
fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj` is automatically cast to `String` in this branch return obj.length//obj自动转换成String类型 } // `obj` is still of type `Any` outside of the type-checked branch return null}
kotlin是强语言,可以很好的避免空指针报错
var a: String?a.length()//编译器会报错,因为a有可能是空指针,是不是很强大,编译器直接告诉你可能出现的空指针。
if not null的用法
val files = File("Test").listFiles()println(files?.size)//等同于下面的效果if(files != null){ println(files.size)}
If not null and else的用法
val files = File("Test").listFiles()println(files?.size ?: "empty")//等同于下面的效果if(files != null){ println(files.size)}else{ println("empty")}
if null执行语句
val data = ...val email = data["email"] ?: throw IllegalStateException("Email is missing!")//等同于下面效果if(data["email"] == null) { throw IllegalStateException("Email is missing!")}
if not null执行语句
val data = ...data?.let { ... // execute this block if not null}//等同于下面效果if(data != null) { ...//execute this block if not null}
又比如:
val b: Boolean? = ...if (b == true) { ...} else { // `b` is false or null,这样是不是很方便,如果是Java处理起来会很麻烦。}
Kotlin支持下面定义
Decimals: 123Longs are tagged by a capital L: 123LHexadecimals: 0x0FBinaries: 0b00001011//不支持8进制
可以这样定义方法:
fun sum(a: Int, b: Int) = a + b//因为方法很简单,可以直接写到一行
也可以通过when关键字来定义方法
fun describe(obj: Any): String =when (obj) { 1 -> "One" "Hello" -> "Greeting" is Long -> "Long" !is String -> "Not a string" else -> "Unknown"}
可以这样使用range来做for循环
for (x in 1..5) {//1-5做循环 print(x)}
除了这个例子,还会很多精巧的地方,比如
fun main(args: Array<String>) { for (x in 1..10 step 2) { //从1到10,每步是2 println(x) } for (x in 9 downTo 0 step 3) {// 9到0,每步是3 println(x) }}
定义一个list列表
val items = listOf("apple", "banana", "kiwi")//listOf是内置函数
定义一个map映射
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
kotlin支持lambda函数编程,想想下面的语句如果是java代码要写多少行。
fun main(args: Array<String>) { val fruits = listOf("banana", "avocado", "apple", "kiwi") fruits .filter { it.startsWith("a") }//过滤掉不是a开头的单词 .sortedBy { it }//排序 .map { it.toUpperCase() }//单词变为大写,比如:apple变为APPLE .forEach { println(it) }//forEach循环}
因为kotlin没有extension关键字,但是你可以通过下面方法对内置类进行扩展
fun String.spaceToCamelCase() { ... }"Convert this to camelcase".spaceToCamelCase()
在类和继承方面,需要注意,因为kotlin遵循的是Effective Java原则,所以所有的kotlin类都是final类型,如果要使得这个类能被继承,那么需要加上open关键字
open class Base { open fun v() {} fun nv() {}}class Derived() : Base() { override fun v() {}}
另外继承的超类和实现的接口出现了同样的方法名,那么这个方法必须被复写,而复写一定要显性的加上override关键字
open class A { open fun f() { print("A") } fun a() { print("a") }}interface B { fun f() { print("B") } // interface members are 'open' by default fun b() { print("b") }}class C() : A(), B { // The compiler requires f() to be overridden: override fun f() { super<A>.f() // call to A.f() super<B>.f() // call to B.f() }}
抽象类默认是open的,所以不用显性加上open关键字
open class Base { open fun f() {}}abstract class Derived : Base() { override abstract fun f()}
今天就汇总到这了,下篇继续。
- Kotlin汇总1
- kotlin汇总8-其他1
- Kotlin学习资料汇总
- Kotlin汇总4-泛型
- kotlin汇总6-函数
- kotlin汇总7-Coroutines
- Kotlin的学习汇总
- kotlin汇总10-Java调用kotlin
- Kotlin语言学习资源汇总
- kotlin项目推荐 资料汇总
- kotlin汇总8-其他2
- Kotlin(1)
- kotlin汇总9-在kotlin中调用java
- Kotlin汇总2-类构造,属性,字段
- Kotlin入门(1)搭建Kotlin开发环境
- Kotlin学习(1):Kotlin简介
- 1 Introduction To Kotlin
- kotlin(1)-HelloWorld
- 【学习笔记】python的基础语法
- 利用继承和多态扩充程序功能
- 【数据结构基础】二叉搜索(排序)树的基本操作
- Linux-rpm命令管理介绍
- 微信联系人列表点击侧边栏首字母定位到相应联系人列表的实现方法
- Kotlin汇总1
- 串并转换verilog程序
- USACO-Section 1.3 Barn Repair[...]
- 转载“克鲁斯卡尔算法的详解”
- 栈
- 现在看到这里
- 1011. A+B和C (15)
- SAP UI5的HTML调用view报错500
- mybatis传多个参数(不使用@param注解情况下),3.4.2版本之后使用#{0}-#{n}引起的参数绑定异常,以及settings属性中useActualParamName的作用。