Me
Android kotlin 记录_第1张图片

目录

          • Kotlin 变量:var,val
          • Kotlin 函数
          • Kotlin 扩展函数
          • Kotlin 逻辑控制
            • if
            • when
          • Kotlin 继承与构造函数
            • 继承
            • 构造函数
          • Kotlin 数据类与单例
            • 数据类
            • 单例
          • Kotlin ?和!!
          • Kotlin lateinit var 和 by lazy (延迟初始化)
          • Kotlin 集合
          • Kotlin 集合函数式Api
            • maxBy
            • map
            • flatMap
            • filter
            • any
            • all
          • Kotlin 内联函数
            • let
            • with
            • run
            • apply
            • also
          • Kotlin 函数的参数默认值
          • Kotlin private,protected,internal,public
          • Kotlin 循环语句: for,in
          • Kotlin Gson解析
          • Kotlin companion object

Kotlin 变量:var,val

var(variable)用来声明一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。
val(value)用来声明一个只读变量,这种声明变量的方式相当于java中的final变量。

Kotlin 函数
fun 函数名(参数名:类型,参数名:类型...) :返回类型{return 返回值}fun methodName(param1:Int,param2:Int):Int{return 0}//当一个函数中只有一行代码时,可以不必写函数体,直接用等号连接即可。fun methodName(param1:Int,param2:Int):Int = 0//扩展:无限参数传递/*** kotlin版代码 ***/fun displayActors(vararg name: String) {    println("actors: " + name);}/*** Java版代码 ***/public void displayActors(String... name) {    System.out.println("actors :" + name);}
Kotlin 扩展函数
//1.首先创建String.kt,也可以在现有类添加//2.最好将它定义成顶层方法,可以让它拥有全局的访问域fun String.letterCount():Int{var count = 0for (char in this){if(char.isLetter()){count++}}}
Kotlin 逻辑控制
if
//if语句使用每个条件的最后一行代码作为返回值fun largerNumber(num1: Int, num2: Int): Int {    val value = if (num1 > num2) {        num1    } else {        num2    }    return value}
when
when(参数){匹配值 -> {执行逻辑}(执行逻辑只有一行代码时,{}可以省略)else -> {默认逻辑}}//case1fun getScore(name: String) = when (name) {    "Tom" -> 80    "jim", "jack" -> 90    else -> 100}//case2//when允许进行类型匹配fun checkNumber(num: Number) {    when (num) {        is Int -> {println("number is Int")}        is Double ->{println("number is Double")}        else -> {println("number not Number")}    }}//case3//when语句不带参数的用法,可以已条件的格式去判断fun getScore(name: String) = when {    name.startsWith("Tom") -> 80    name == "Jim" -> 90    name == "Jack" -> 90    else -> 100}
Kotlin 继承与构造函数
继承
//加上open关键字,就允许被继承了。open class Person{}//java中用extends继承;kotlin中用:冒号继承class Student : Person(){}
构造函数
//主构造函数class Student(val son: String, val grade: Int) : Person() {//init主构造函数体    init {        println("son is $son")        println("grade is $grade")    }}//次构造函数"constructor"关键字定义//注意:所有次构造函数必须调用主构造函数open class Person(name: String, age: Int) {}class Student(val son: String, val grade: Int, name: String, age: Int) : Person(name, age) {    constructor(name: String, age: Int) : this("", 0, name, age) {}    constructor() : this("", 0) {}}
Kotlin 数据类与单例
数据类
// data关键字,可以帮你将equals(),hashCode(),toString()等固定且无实际逻辑意义的方法自动生成data class StudentBean(    var orders: List<OrderItemBean>,    var name: String,    var age: Int)
单例
// object 关键字,一个单例就创建了object Singleton{}
Kotlin ?和!!

"?"当前对象可以为空,系统在任何情况不会报它的空指针异常。
"!!"当前对象不能为空,如果对象为null,那么系统一定会报异常!

Kotlin lateinit var 和 by lazy (延迟初始化)
/** lateinit var **/private lateinit var name: String /** by lazy **///用于属性延迟初始化val name: Int by lazy { 1 } //用于局部变量延迟初始化public fun foo() {    val bar by lazy { "hello" }    println(bar)    //::object.isInitialized可用于判断object变量是否已经初始化    if(::name.isInitialized){}}
Kotlin 集合

List接口的方法支持功能
MutableList接口的方法支持读写功能

//List集合//创建不可变集合,无法对该集合进行添加,修改,删除操作。val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")//创建可变集合val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")list.add("Watermelon")for (fruit in list) {    println(fruit)}//Map集合val map = mapOf<String, Int>("Apple" to 1, "Banana" to 2, "Orange" to 3)for ((fruit, number) in map) {    println("fruit is " + fruit + ", number is " + number)}
Kotlin 集合函数式Api

Lambda语法结构
{参数名1:参数类型,参数名2:参数类型->函数体}

maxBy
//maxBy 获取集合中某个元素的某个字段最大值的元素,如果有多个最大值元素,那么返回第一个。 val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")val maxLengFruit = list.maxBy(it.leng)
map
//map 用于将集合中的每一个元素都映射成一个另外的值,最终生成一个新的集合。val list = listOf("App le", "Bana na", "Oran ge", "Pe ar", "Gra pe", "Water melon")val newList = list.map{it.split(" ")}//打印"Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon"
flatMap
//flatMap val list = listOf("App le", "Bana na", "Oran ge")val newList = list.flatMap{it.split(" ")}//打印"App", "le", "Bana", "na", "Oran", "ge"
filter
//filter 用与过滤集合中的数据val list = listOf("App le", "Bana na", "Oran ge", "Pe ar", "Gra pe", "Water melon")val newList = list.filter{it.length <=5}//打印"Apple", "Pear", "Grape"
any
//any 用于判断集合中是否至少存在一个元素满足指定条件val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")val anyResult = list.any { it.length <= 5 }
all
//all 用于判断集合中是否所有元素都满足指定条件val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")val allResult = list.all { it.length <= 5 }
Kotlin 内联函数
let
//let 表示object不为null的条件下,才会去执行let函数体object?.let{   it.todo()}
with
//with 适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可with(object){//todo}
run
//run 实际上可以说是let和with两个函数的结合体run(object){//todo}
apply
//apply 从结构上来看apply函数和run函数很像,唯一不同点就是它们各自返回的值不一样,run函数是以闭包形式返回最后一行代码的值,而apply函数的返回的是传入对象的本身apply(object){//todo}
also
//also also函数的结构实际上和let很像唯一的区别就是返回值的不一样,let是以闭包的形式返回,返回函数体内最后一行的值,如果最后一行为空就返回一个Unit类型的默认值。而also函数返回的则是传入对象的本身object.also{//todo}
函数名 函数体内使用的对象 返回值 是否是扩展函数 适用的场景
let it 闭包形式返回 适用于处理不为null的操作场景
with this 闭包形式返回 适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到UI上
run this 闭包形式返回 适用于let,with函数任何场景。
apply this 返回this 1、适用于run函数的任何场景,一般用于初始化一个对象实例的时候,操作对象属性,并最终返回这个对象。
2、动态inflate出一个XML的View的时候需要给View绑定数据也会用到.
3、一般可用于多个扩展函数链式调用
4、数据model多层级包裹判空处理的问题
also it 返回this 适用于let函数的任何场景,一般可用于多个扩展函数链式调用
Kotlin 函数的参数默认值
//给参数默认值fun printParams(num: Int = 100, str: String = "hello") {    println("num is $num , str is $str")}//调用fun main(){printParams(123)}//或者fun main(){printParams(num = 123)}
Kotlin private,protected,internal,public

private var v1 = “本类可见”
public var v2=“任何地方都可以见”
protected var v3=“只有在本源文件中可见”
internal val v4=“同一模块下可见”

Kotlin 循环语句: for,in
/**可以用in判断数字是否在某个区间**/if(x in 1..5){ ...}//检查x数值是否在1到5区间if(name in list){...}//检查list中是否有某个元素/**可以用in遍历整个集合**/for(i in 1..5){ ...//遍历1到5for(item in list){...//遍历list中的每个元素(相当于Java的for(String item : list))/**在遍历集合时,可以从第N项开始遍历**/for(i in 3..list.size-2){...相当于for (int i = 3; i <= list.size()-2; i++)/**可以倒序遍历**/for(i in list.size downTo 0) {...相当于for (int i = list.size(); i >= 0; i--)/**可以反转列表**/for(i in (1..5).reversed())/**可以指定步长**/for(i in 1.0..2.0 step 0.3) //步长0.3
Kotlin Gson解析
// 对象Gson().fromJson(data, ResultBean::class.javaObjectType)// 集合val fromJson: MutableList<String> = Gson().fromJson<MutableList<String>>(recent_search, MutableList::class.javaObjectType)
Kotlin companion object
/*companion object 修饰为伴生对象,伴生对象在类中只能存在一个,类似于java中的静态方法 Java中使用类访问静态成员,静态方法*/companion object {        const val LOAN_TYPE = "loanType"        const val LOAN_TITLE = "loanTitle"                @JvmStatic//静态注解        fun startIntent(context: Context, orderNo: String) {    val intent = Intent()   intent.setClass(context, OrderDetailActivity::class.java)    intent.putExtra(LOAN_TYPE , orderNo)    context.startActivity(intent)}}

更多相关文章

  1. Android 访问Webservice接口,参数对象不能串行化问题解决(java.lan
  2. Activity之间传递对象
  3. Android中main.xml界面参数笔记
  4. android中LayoutParams设置参数的理解
  5. Android OKhttp 上传文件袋参数
  6. Android intent 传递数组对象序列化
  7. Android带参数链接请求服务器
  8. Android自动化工具Monkeyrunner使用(六) —— 根据ID查找对象

随机推荐

  1. android.view.InflateException报错
  2. android获取手机存储状态
  3. android EditText 自动滚动条 显示最新内
  4. Security and Permissions安全与权限(五)
  5. Android(安卓)Tint ImageView 无法设置Ti
  6. 备忘
  7. android获取app的版本信息
  8. android srcollview按钮顶部停留
  9. Android练习之Linkify文字链接
  10. Android滑动解锁控件