Kotlin学习(3)可空类型和类型系统(3),retrofitretrofit原理面试
=========================================================================
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
else -> {
print(“Not a string”)
-1
}
}
}
…
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。





既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
写在最后
最后我想说:对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:


当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
链图片转存中…(img-0Kyj9hYE-1712779314742)]
[外链图片转存中…(img-sd08Cvnw-1712779314743)]
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐

所有评论(0)