没有合适的资源?快使用搜索试试~ 我知道了~
Kotlin基础.pdf(39页,包含基础篇和进阶篇)
2 下载量 136 浏览量
2024-05-15
10:23:07
上传
评论
收藏 373KB PDF 举报
温馨提示
试读
39页
基础篇: 变量和类型 方法和属性 伴生对象 lambda函数 数组和集合 区间 异常 进阶篇: 字符串 多分支 泛型 数据类 单例模式 操作符 别名 反射 新语法 辅助函数 补漏篇
资源推荐
资源详情
资源评论
!"#$%&概述
基础篇
变和类型
空安全
类型推导
特殊类型
法和属性
法
常规法
包级法
扩展法
特殊参数
构造法
属性
伴对象
'()*+(函数
数组和集合
区间
异常
进阶篇
字符
多分
泛型
变
逆变(%&)
协变(",#)
星投影(-)
具化(./%0%/+)
数据类
单模式
操作符
常规操作符
操作符重载
别名
反射-
类引
法引
属性引
新语法
中缀
委托
类委托
属性委托
常委托
延迟
内联
辅助函数
补篇
!"#$%&调1(2(
1(2(调!"#$%&
Kotlin概述
!"#$%&作为种134语,与传统的1(2(相,增加很多有意思的语法糖,可以显
著降低开发难度,提升开发效率,增加代码健壮性。
基础篇
变和类型
!"#$%&中定义变使如下结构定义常5变
val 常名: 类型 = 常值
var 变名: 类型 = 初始值
空安全
1(2(中最常的个问题就是6,$$7"%Y:/;#%"&,在!"#$%&中为减少此问题推出
";#%"&($语法。
<=> 在定义个变时,若在常规类型后加个 ? ,表示此变可以为&,$$。
/** str1
能为
null */
var str1: String = ""
/** str2
可以为
null */
var str2: String? = null
?=> 在调可空对象的法时,需要加个 ? 以进安全的调。
/** str1
定为
null
,因此直接访问它的属性就是安全的
*/
val len1 = str1.length
/** str2
可能为
null
,必须加
?
以安全访问它的属性,当
str2
为
null
时,
len2
也为
null */
val len2 = str2?.length
@=> 如果个对象定义为可空,但在使时确信定为&,$$,则可以使 !! 进
强转,但强建议要这么做
//
当
str2
为
null
时会抛
NPE
val len2 = str2!!.length
A=> 结合 ?: 操作符,可以省掉很多&,$$判断( A ?: B 的含义为,只有当B为&,$$时
才会执C)
fun joinRoom(roomId: Long?, password: String?): Boolean {
roomId ?: return false
password ?: return false
……
}
public String recordingFaceUrl() {
if (mediaBean != null) {
if (mediaBean.recording != null) {
if (mediaBean.recording.face_cover_url != null) {
return mediaBean.recording.face_cover_url;
} else {
return mediaBean.recording.cover_image;
}
} else {
return "";
}
} else {
return "";
}
}
fun recordingFaceUrl(): String {
return mediaBean?.recording?.face_cover_url
?: mediaBean?.recording?.cover_image
?: ""
}
类型推导
<=> 当定义变时初始值类型明确时,可以省类型声明,!"#$%&会动推导出来。
//
动推导出
str1
的类型为
String
var str1 = "abcde"
//
会动推导出
len
的类型为
Int
var len = "ABDEF".length
?=> 当已经经过类型检测时,可以直接当作检测后的类型使,需强转。
void forbar(Object obj) {
if (obj instanceof String) {
((String) obj).chatAt(0);
}
}
fun forbar(any: Any) {
if (any is String) {
// obj
已经被动转成
String
类型
obj.chatAt(0)
}
}
fun forbar(any: Any) {
if (any !is String) return
// obj
已经被动转成
String
类型
obj.chatAt(0)
}
@=> 在泛型相关调中,多数泛型参数也能够被动推导填充(注:前1(2(D也
持部分泛型的类型推导)
A=> 与1(2(进互调时,动推导出的类型是空安全的,并且会失去空安全检
测。
//
动推导出
str1
类型是
String!
,即是
String
也是
String?
val str1 = context.getString(R.string.title)
//
编译会报错并可运,但有
NPE
险
var len1 = str1.length
//
编译会报错并可运,但有
NPE
险
val str2: String = context.getString(R.string.title)
解决办法:在1(2(的法中使 @Nullable 和 @NotNull 注解明确返回值是否
可空
特殊类型
<=> !"#$%&中数字类型处式与1(2(很同,表上全部都是封装的类类型,但实
际可能根据上下章动装箱或拆箱。
外情况是可空类型定对应封装类型,如!"#$%&的 Int? 定对应1(2(
的 Integer
?=> !"#$%&中存在数字的隐式转换,所有同的类型必须显式调相应的转换
法。
@=> 对于E&#和'"&F类型的的位操作,在!"#$%&中必须使位操作函数或中缀表达
式,能使操作符。
剩余38页未读,继续阅读
资源评论
平底斜
- 粉丝: 1070
- 资源: 55
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- meta-llama-3-8b-instruct 的 model-00001-of-00004.safetensors 的2/3
- HTML5小游戏【小鸡飞-蛋蛋跳小游戏】游戏源码分享下载 - dandan.zip
- Hi3861 OpenHarmony 机械臂 (一)
- 生成的DNA序列来摸拟查找特定基因序列.py
- 12345666666666
- 基于协同过滤算法的英语学习平台(springboot+ssm+html+mysql)含运行文档+运行截图+演示视频
- 基于NCP1377芯片 AC220V转DC12V(5A)反激开关电源ALTIUM设计硬件(原理图+PCB)工程文件.zip
- NX二次开发头文件与库目录
- 网络调试助手,最新版本,方便大家调试网络功能
- mysql语句大全及用法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功