Kotlin笔记(九)——语法拾遗

Kotlin的语法已经写了很久了,不过今天这篇文章可以做一个收尾工作了。本篇文章将Kotlin语法中个人使用过程中使用率较高的,但是之前没有涉及的部分做一个补充,至于更高级的Kotlin语法和概念,比如泛型的out和in,牵扯Java的东西相对较多,这里不再详细介绍,大家用到的时候,可以详细了解一下。


对编程语言有过一定了解的人,会发现目前为止,Kotlin中没有static关键字,的确如此,Kotlin没有static关键字,那么如果我们需要定义一些类的静态属性或者方法,该怎么办呢?那需要使用Kotlin的伙伴对象。加上之前介绍过的单实例对象和匿名类语法,这就是全部的Kotlin object表达式的语法。

class Product {

    companion object {
        fun productFactory(): Product {
            return Product()
        }
    }

    fun printInfo() {
        println("A product")
    }
}

上面的例子通过伙伴对象定义了一个静态工厂方法,通过这个方法,我们可以生成一个Product对象。我们可以有下面两种方法调用静态方法

Product.Companion.productFactory().printInfo()
Product.productFactory().printInfo()


Kotlin可以进行运行时类型判断,使用is关键字

val product = Product.productFactory()
if (product is Product) {
    println("is a Product object")
}

if (product !is Product) {
    println("is not a Product object")
}


强制类型转换使用as关键字

var obj: Any? = product
val castProduct1 = obj as Product
val castProduct2 = obj as Product?

obj = "123"
val castProduct3 = obj as? Product
val castProduct4 = obj as? Product?
例子中给出了四种使用as的方式,下面逐行解释:
  1. 将obj转换为Product类型的对象,如果obj不是可以转换为Product类型的对象,则会抛出异常,如果obj为null,也会抛出异常;

  2. 将obj转换为Product?类型的对象,,如果obj不是可以转换为Product类型的对象,则会抛出异常,如果obj为null,则返回null

  3. 将obj转换为Product类型的对象,如果obj不是可以转换为Product类型的对象,则返回null,如果obj为null,则返回null;

  4. 将obj转换为Product?类型的对象,如果obj不是可以转换为Product类型的对象,则返回null,如果obj为null,则返回null.

总结一下,就是as?是尝试性的进行类型转换,如果能转换,则转换,不能转换,则返回null。


Kotlin提供了容器,容器就是承载其他类型对象的类型,Kotlin提供了List,Map,Set等一系列常用的容器,不过所有类型,Kotlin都提供了可变和不可变两种,可变的我们可以编辑容器中保存的对象,而不可变的我们不能对容器进行add,set等操作。以List为例:

val list = arrayListOf(1, 2, 3)
//list.add(4)
val mutableList = mutableListOf(1, 2, 3)
mutableList.add(4)


接触过C#的应该知道LINQ,Kotlin提供了类似于LINQ的语法,简单来说,就是我们可以通过一系列的运算施加在容器上,最终得到我们希望得到的结果,比如我们基于上面的list,筛选出大于等于2的值,然后对其进行逆序排序:

val sortedList = list.filter {
    it >= 2
}.sortedDescending()


范围可以用于生成数字的序列,常用语for循环中,给出Kotlin文档中几个例子

for(i in 1..4) print(i)

生成1,2,3,4

for (i in 4 downTo 1) print(i)

生成4,3,2,1

for (i in 1..4 step 2) print(i)

生成1,3

for (i in 4 downTo 1 step 2) print(i)

生成4,2

for (i in 1 until 4) print(i)

生成1,2,3


至此,Kotlin常使用的语法基本介绍完毕,相信了解这些语法,对大家入门Kotlin会有一定的帮助,如希望深入学习,最好的方法还是阅读Kotlin的官方文档。由于Kotlin的语法并不复杂,官方文档仅有195页,而实际对于大家使用帮助比较大的,也就127页,所以读来也不会很费劲。从目前本人Android开发的使用感受来看,Kotlin编写出的代码能比Java代码简洁不少,而且结构相对紧凑,冗余的语句相对较少,的确不错。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值