Kotlin 基础学习

Posted CrazyApes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 基础学习相关的知识,希望对你有一定的参考价值。

学!

Kotlin

只要学,啥时候都不晚!
这里主要介绍从java转到kotlin中一些常见的基础学习
读完这篇文章
你应该能很快适应kotlin的开发节奏了
内容不断补充中…

变量

弱数据类型

  • var 可变变量
  • val 只读变量 类似final
// 各种示例
var name = "CrazyApes"
name = "CrazyApe"

var myName : String = "CrazyApes"
var age : Int = 99
var number = 3.1
var floatNumber 

val value = "不可变"

class Address 
    var name: String = "Holmes, Sherlock"
    var street: String = "Baker"
    var city: String = "London"
    var state: String? = null
    var zip: String = "123456"

lateinit延迟初始化

需要在特定时期初始化的字段可以用 lateinit 声明

  • 必须初始化后才可以使用,否则会出异常
    kotlin.UninitializedPropertyAccessException: lateinit property value has not been initialized
  • lateinit 声明后不允许赋值为 null, 加问号也不行。
    所以,如以下示例代码,findViewById返回为null会崩,当然,我们本意也不希望它空,但是这个是要注意你如果声明的是一些需要用的变量的话 ,需要注意此类问题。
private lateinit var mBaseView : View
private lateinit var mData : String
private var mNullableStr : String?  = null

// 例如 onCreate
onCreate(...)
    mBaseView = findViewById(R.id.baseView)

    // 未初始化 UninitializedPropertyAccessException
    print(mData)

    // 可检查
    if (mData.isInitialized)
         print(mData)

    // 如果return了null 就  NullPointerException
    mData = getIntent.getExtraString("MaybeNull")

    mNullableStr = getIntent.getExtraString("MaybeNull")
    val length = mNullableStr?.length // 如果null ,return null
    val length1 = mNullableStr?.length ?: -1; // 如果null ,return -1  有点像三目的感觉

空安全

kotlin 是空安全的语言
意思就是你要是没显示声明可以为空,只要遇到了空就报空指针。

  • ?. 安全的调用方式
    如果是 null 不会执行后续的操作,直接返回 null
  • ?:
    如果是 null,则执行冒号后面的部分
  • !!
    非空断言运算符,若果是null,就NullPointerException
private var mNullableStr : String?  = null
private var mNullableList : List<Int?> ?= null

fun testForNullSafe()
    mNullableStr = getIntent.getExtraString("MaybeNull")
    val length = mNullableStr?.length // 如果null ,return null
    val length1 = mNullableStr?.length ?: -1; // 如果null ,return -1  有点像三目的感觉
    val length2 = mNullableStr!!.length; // 如果null ,就  NullPointerException

    mNullableList = listOf(1, 2, null, 4)
}

DataClasses

数据类
大概类似于vo bean pojo 等数据类

注意事项

  • 主构造函数必须要至少有一个参数
    在Java虚拟机里,如果生成的类需要有一个无参数的构造函数,所有属性的默认值必须有一个具体的值

  • 主构造函数中的所有参数必须被标记为val或者var

  • 数据类不能有以下修饰符:abstract,inner,open,sealed

// 常见方式
data class NetData(
        val state: Int,
        val data: Data
) 
    // 等同于java静态内部类 static class
    // kotlin 内部类需 加 inner 标识
    // 没加inner 就是静态内部类
    class Data(
            val name: String,
            val age: Int,
            val sex: Int
    )


// 需要无参构造的事例
data class User(val name: String = "",
                val age: Int = 0)


静态内部类实现

kotlin 有专门的 inner 标识非静态内部类
没有添加 inner 标识则默认为静态内部类使用


data class NetData(
        val state: Int,
        val data: Data
) 
    // 等同于java静态内部类 static class
    // kotlin 内部类需 加 inner 标识
    // 没加inner 就是静态内部类
    class Data(
            val name: String,
            val age: Int,
            val sex: Int
    )


以上是关于Kotlin 基础学习的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kotlin 片段内的按钮之间切换片段?

kotlin-从一个片段更改多个片段的小数位

如何更改片段 Kotlin

如何在kotlin的片段内显示网格视图?

如何在kotlin中从一个片段转到另一个片段?

Kotlin:片段内的按钮需要在开始活动之前单击两次。如何一键启动活动?