kotlin实践笔记
1.声明一个属性的完整语法是
var <propertyName>[: <PropertyType>] [= <property_initializer>][<getter>][<setter>]
初始器initializer、getter、setter都是可选的。如果PropertyType类型可以从初始器initializer、getter中推导出来,那么也是可以省略的。
例如:
var data1 = 1 // 类型 Int、默认 getter 和 setter
var data2 : Int? //错误,没有初始化,需要显示初始化器
只读属性用val关键字替代var,并且只读属性不能有setter。
我们可以自定义访问器,如果定义了setter,那么每次给属性赋值时都会调用它。如果定义了getter,那么每次访问该属性时都会调用它。
例如:
val videoHeight: Intget() = mediaplayer?.videoHeight ?: 0var videoName: Stringget() = mediaplayer?.name ?: "video"set(value){filed = value}
Setter 的参数名默认是value,当然也可以改成自己喜欢的名字。
Setter的field标识符叫做幕后字段,只在访问器中出现。
2.延迟属性委托 by lazy
Kotlin 提供by lazy的方式实现懒加载委托,也就是在data第一次使用的时候才开始加载。
by lazy的方式,只用于val定义的属性。
例如:
val testData: String by lazy{println("initdata!")"hello"
}fun main(){println(testData)println(testData)
}//打印输出
initdata!
hello
hello
3.内置函数let、also、with、run、apply
let是一个域作用函数,定义一个变量在一个特定的作用域范围内,避免写一些重复判空的操作
例如:
//不适用域函数
mVarms?.function1()
mVarms?.function2()
mVarms?.function3()//使用域函数
//使用it替代object对象去访问其公有的属性 & 方法
mVarms?.let{it.function1()it.function2()it.function3()
}
also和let的用法一致,只是返回的时候,also是返回最后一行表达式结果,而also是返回的it执行后的变量
例如:
var result = mVarms?.let{it.function1()it.function2()it.function3()999
} //返回的结果是999赋值给resultvar result = mVarms?.also{it.function1()it.function2()it.function3()999
} //返回的是mVarms对象本身赋值给result
with是用在需要多次调用对象属性或者方法的时候,可省去对象名称
例如:
val people = People("mike", 28)
with(people){println("my name is $name, and i'm $age years old")
}
run是结合了let和with的用法,而apply则是结合了also和with的用法
例如:
val people = People("mike", 28)
var result = people?.run{println("my name is $name, and i'm $age years old")999
} // 返回999var result = people?.apply{println("my name is $name, and i'm $age years old")999
} // 返回people
kotlin实践笔记相关推荐
- Kotlin学习笔记20 阶段复习2
参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
- webpack 实践笔记(一)--- 入门
webpack 实践笔记入门(一) [webpack官网文档地址]:(http://webpack.github.io/docs...) [实践工程地址]: (https://github.com/s ...
- 基于 Docker 和 GitLab 的前端自动化部署实践笔记
基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...
- Kotlin学习笔记(3)- 语法
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- Kotlin学习笔记(2)- 空安全
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- Kotlin学习笔记(1)- 环境配置
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...
- kotlin学习笔记——枚举、封闭类
1.枚举 kotlin中提供类枚举的实现,与java相同.枚举可以带参数,如 enum Icon(val res: Int){MENU(R.drawable.menu),BACK(R.drawable ...
- kotlin学习笔记——重载操作符
Kotlin中有很多操作符可以使用,具体可以见kotlin学习笔记--操作符_There is a Bug!!!-CSDN博客 Kotlin的一个特点就是可以重载这些操作符,为操作符赋予不同的行为. ...
最新文章
- 【机器学习入门笔记0:OpenCV+TensorFlow学习内容(目录)】20190122
- Redis常见配置redis.conf
- Visio工具 UML的建模
- 世纪渣男何书桓! | 今日最佳
- 微信小程序云开发教程-微信小程序的JS高级-页面间数据传递
- Web系统Login拦截器
- 网页唤起QQ临时会话
- lnmp 一键安装
- android 声音不想从蓝牙手机中出来,Android蓝牙音频两个问题
- 英特尔处理器排名_鲁大师公布三季度PC处理器、内存排行榜:AMD成最大赢家
- Docker 搭建Pika分片多主集群(Docker Codis Pika Replication Sharding)
- java短信验证码_java实现发送短信验证码
- python中quadratic,Python: Using CVXOPT for quadratic programming
- Android Edittext 手机号码格式输入设置
- 高等数学拾遗 矢量分析
- CSAPP 第三版 第十章 家庭作业and so on
- DOS系统和windows系统有什么区别
- 关于计算机科学与技术学科和软件工程学科的区别
- 宿州学院计算机录取分数线,2017宿州学院录取分数线
- redis的key都变成了backup,值也都不见了,这是为什么呢?
热门文章
- JavaWeb用户信息管理系统(附全部代码)
- matlab 调日法,【图】手表调日期方法 教你各种表的使用教程_手表调日期_伊秀服饰网|yxlady.com...
- 繁星的舞蹈依旧没有变
- Android初级教程人品计算器
- ThreadPoolExecutor源码阅读笔记(二)FutureTask
- 用Python做动态时钟
- 基于arduino的简易警报器
- android studio创建 styles v19 styles v21
- 黄冈师范学院计算机学院专业,黄冈师范学院数学与计算机科学学院介绍
- set集合完整版整理