Java中的数组的类型 T[](long[],int[]…}),而在Kotlin中,直接用Array类型表示数组,比如我们构造一个int数组,5个元素,每个元素的初始值为 i*i:
val squareArray = Array(5, {i -> i * i})
squareArray.forEach(::println)
0
1
4
9
16
Kotlin中对Java中8个基本类型数组用了 新的 xxxArray来定义。(比如 BooleanArray、ByteArray、DoubleArray…)
=========================================================================
Java中的用Optional中的orElse
来判空,但是使用起来不美观。
Kotlin中使用了 ?.安全调用符
,?:Elvis操作符
。举一个例子:
fun main(args: Array){
println(getLength(null))
println(getLength(“hello”))
}
fun getLength(s: String?):Int{
return s?.length ?: 0 //如果s不为空,就返回 s.length,否则就返回0
}
==========================================================================
null的类型是 Nothing?
在Kotlin中,多使用 ?
,就可以免去很多判空的操作:
val str:String = null //编译报错,因为String不能为空
var nullStr:String? = null //编译通过
null == null //返回true
null is Any //返回false
null is Any? //返回true
var a = null
a //输出null
a = 1 //编译报错,因为null的类型Nothing? 而1是Int,不能向上转型
我们不能用可空类型来直接调用它的属性或方法,例如下面代码直接报错:
nullStr.length //编译报错
nullStr?.length //要用安全调用符 ?. 编译才正确
!!非空断言
使得可空类型对象可以调用成员方法或者属性:
nullStr = null
nullStr!!.lenth //如果nullStr为空,则抛出空指针异常
…Expection
=========================================================================
Kotlin中的Unit
类型实现了和Java中void
一样的功能
下面是Unit的定义
public object Unit{ //Unit类型是一个object对象类型
override fun toString() = “kotlin.Unit” //如果println输出对象类型,就是"kotlin.Unit"
}
当一个函数没有返回值的时候,我们就用Unit,并且不需要显示的返回Unit、或者声明一个函数的返回类型为Unit。
编译器会推断它,所以Unit对我们来说相当是缺省的。
在Java中,如果你想让一个函数返回值永远是null,那你可把函数的返回类型写成是 void的装箱类 Void
,并返回null
而这个Void
就对应Kolin中的Nothing?
,其唯一可被访问的返回值也是null
在Kotlin系统类型中,Nothing
是最底层,其构造函数时private的,说明其不能被实例化。
**如果一个函数的返回值是Nothing,这代表这个函数永远都不会有返回值。**和Java的void一样
我们可以在返回值为Nothing的函数去抛出异常
Nothing和Unit的区别:
Unit是有返回类型Unit
的
而Nothing是没有任何返回类型的
Nothing和Nothing?的区别:
Nothing?
类型除了 null,其他都不能赋值。
而Nothing
不能赋值。
Any?
是可空类型层次的根,Any?是Any的父类。
1 is Any //Int类型的1是Any
true
1 is Any? //Int类型的1是Any?
true
null is Any //null不是Any类型
false
null is Any? //null是Any?
true
Any() is Any? //Any()是Any?类型
true
==============================================================================
在一般情况下,不需要在Kotlin中使用显示转换操作符,因为编译器会用is检查并且在需要时自动转换。
is运算符可以检查对象A是否与特定的类型X兼容(A是X类型或者 是X类型的派生类),和Java中的instanceOf()
差不多
在kotlin中,我们可以使用 is,也可以使用 !is
在kotlin中的自动转化是这个姿势的:
fun strlen(ani: Any): Int {
return when (ani) {
is String -> ani.length
is Number -> ani.toString().length
is Char -> 1
is Boolean -> 1
尾声
如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
Android进阶学习资料库
一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!
大厂面试真题
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《2019-2021字节跳动Android面试历年真题解析》
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-JNH6sxT5-1714767797604)]
《2019-2021字节跳动Android面试历年真题解析》
[外链图片转存中…(img-fqvbNNx1-1714767797605)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!