(二)使用Kotlin开发Android应用之详细用法(常用命令)

一.最近新项目开始使用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方法肯定会有问题的,大家稍微留意下就好,好啦,博客先分享到这里了哈!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值