赞
踩
一.最近新项目开始使用kotlin开发项目,搜集了一些常用命令和常用方法,毕竟现在好多公司都在用kotlin开发项目,具体安装和配置教程请戳这里
二.推荐一些kotlin学习网址
kotlin语言中文网、Kotlin 资源大全 - 学 Kotlin 看这一篇教程就够了
1.实例化话对象 不需要new关键字
2.没有“new”
Kotlin实例化一个对象时不需要new关键字
var list=ArrayList()
3.变量var、常量val、类型推断
用var定义变量(像js)
var name:String="my name"
用val定义常量(相当于final)
val TAG:String="ClassName"
4.空指针安全
在Kotlin里,可以用“?”表示可以为空,也可以用“!!”表示不可以为空。
空指针安全并不是不需要处理空指针,你需要用“?”声明某个变量是允许空指针的,例如:
var num:Int?=null
5.定义函数
在Kotlin语法里,定义函数的格式是这样的
fun 方法名(参数名:类型,参数名:类型…) :返回类型{
}
所以,一般来说,函数是这样写的
fun getAddress(id:Int,name:String):String{
return"got it"
}
由于Kotlin可以对函数的返回值进行类型推断,所以经常用“=”代替返回类型和“return”关键字,上面这段代码也可以写成
fun getAddress(id:Int,name:String)={ //用“=”代替return,返回String类型则交给类型推断
"got it" //return被“=”代替了
}
如果函数内代码只有一行,我们甚至可以去掉{}
fun getAddress(id:Int,name:String)="got it" //去掉了{}
}
函数也允许空指针安全,在返回类型后面增加“?”即可
fun getAddress(id:Int,name:String) :String?="got it"
6.用is取代了instance of
代码很简单
if(obj is String)...
9.in、区间和集合
Kotlin里有区间的概念,例如1…5表示的就是1-5的整数区间
可以用in判断数字是否在某个区间
if(x in 1..5){ ...//检查x数值是否在1到5区间
可以用in判断集合中是否存在某个元素
if(name in list){...//检查list中是否有某个元素(比Java简洁多了)
可以用in遍历整个集合
for(i in 1..5){ ...//遍历1到5
for(item in list){...//遍历list中的每个元素(相当于Java的for(String item : list))
另外,in在遍历集合时功能相当强大:
在遍历集合时,可以从第N项开始遍历
for(i in 3..list.size-2){...相当于for (int i = 3; i <= list.size()-2; i++)
可以倒序遍历
for(i in list.size downTo 0) {...相当于for (int i = list.size(); i >= 0; i--)
可以反转列表
for(i in (1..5).reversed())
可以指定步长
for(i in 1.0..2.0 step 0.3) //步长0.3
Kotlin里的集合还都自带foreach函数
list.forEach {...
10.用when取代了switch
switch在Java里一直不怎么给力,在稍老一些的版本里,甚至不支持String
Kotlin干脆用强大的when取代了switch,具体用法如下
15.类的家族结构
Kotlin关于类的家族结构的设计,和Java基本相似,但是略有不同:
Object:取消,在Java里Object是所有类的基类,但在Kotlin里,基类改成了Any
Any:新增,Kotlin里所有类的基类
object:新增,Kotlin是区分大小写的,object是Kotlin中的单例类
new:取消,Kotlin不需要new关键字
private: 仍然表示私有
protected: 类似private,在子类中也可见
internal: 模块内可见
inner:内部类
public: 仍然表示共有,但是Kotlin的内部类和参数默认为public
abstract:仍然表示抽象类
interface:仍然表示接口
final:取消,Kotlin的继承和Java不同,Java的类默认可继承,只有final修饰的类不能继承;Kotlin的类默认不能继承,只有为 open:修饰的类能继承
open:新增,作用见上一条
lazy只适用于val对象,对于var对象,需要使用lateinit
static:取消!Java用static去共享同一块内存空间,这是一个非常实用的设计,不过Kotlin移除了static,用伴随对象(compaion object)的概念替换了static,伴随对象其实是个单例的实体,所以伴随对象比static更加灵活一些,能去继承和扩展。
继承:在Kotlin里,继承关系统一用“:”,不需要向java那样区分implement和extend,在继承多个类/接口时,中间用“,”区分即可,另外,在继承类时,类后面要跟()。所以在Kotlin里,继承类和接口的代码一般是这样的:
class BaseClass : Activity(), IBinder{ //示例
16.Anko用法
Anko目前主要用于:Layout布局、SQLite数据库和Coroutines协程三个方面,可以不用自己写xml。
添加Anko的依赖: implementation "org.jetbrains.anko:anko:$anko_version"
解决:排除anko包中的v4包
implementation("org.jetbrains.anko:anko:$anko_version") {
exclude module: 'support-v4'
}
17.两个等号和三个等号区别
==判断值是否相等,===判断值及引用是否完全相等。
val num: Int = 128
val a:Int? = num
val b:Int? = num
println(a == b)
print(a === b)
输出结果:true、false
18.常用操作符
Kotlin 的操作符跟 RxJava 基本一致,不需要额外记忆。
下标操作类
contains —— 判断是否有指定元素
elementAt —— 返回对应的元素,越界会抛IndexOutOfBoundsException
firstOrNull —— 返回符合条件的第一个元素,没有 返回null
lastOrNull —— 返回符合条件的最后一个元素,没有 返回null
indexOf —— 返回指定元素的下标,没有 返回-1
singleOrNull —— 返回符合条件的单个元素,如有没有符合或超过一个,返回null
判断类
any —— 判断集合中 是否有满足条件 的元素
all —— 判断集合中的元素 是否都满足条件
none —— 判断集合中是否 都不满足条件,是则返回true
count —— 查询集合中 满足条件 的 元素个数
reduce —— 从 第一项到最后一项进行累计
过滤类
filter —— 过滤 掉所有 满足条件 的元素
filterNot —— 过滤所有不满足条件的元素
filterNotNull —— 过滤NULL
take —— 返回前 n 个元素
转换类
map —— 转换成另一个集合(与上面我们实现的 convert 方法作用一样);
mapIndexed —— 除了转换成另一个集合,还可以拿到Index(下标);
mapNotNull —— 执行转换前过滤掉 为 NULL 的元素
flatMap —— 自定义逻辑合并两个集合;
groupBy —— 按照某个条件分组,返回Map;
排序类
reversed —— 反序
sorted —— 升序
sortedBy —— 自定义排序
sortedDescending —— 降序
以上就是一些常用的命令及用法案例,协程这块我后期打算单独写一篇文章,常用命令只要平时大家多写几遍 自然就熟悉了,
还有一点就是平时项目中要是kt和java混合开发时候,特别要注意?和!!的使用,举个栗子:一个方法,你忘记了加?符号,但是这个字段 有时候可能为null 那么这时候你去调用kt方法肯定会有问题的,大家稍微留意下就好,好啦,博客先分享到这里了哈!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。