美文网首页
Kotlin学习笔记- 常量、变量

Kotlin学习笔记- 常量、变量

作者: smallestt | 来源:发表于2018-12-19 14:30 被阅读0次

1、后期初始化与延迟初始化

* 1.1、后期初始化属性

声明后期初始化属性的特点:

  • 使用lateinit关键字
  • 必须是可读且可写的变量,即使用var声明的变量
  • 不能声明于可空变量
  • 不能声明于基本数据类型变量。例:Int、Float、Double等,注意:String类型是可以的
  • 声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常
//声明控件
private lateinit var mTablayout:Tablayout
//赋值
mTablayout = find(...)
//使用
...

* 1.2、延迟初始化属性

所谓延迟初始化即:指当程序在第一次使用到这个变量(属性)的时候在初始化。
声明延迟初始化属性的特点:

  • 使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
  • 必须是只读变量,即用val声明的变量。
// 声明一个延迟初始化的字符串数组变量
private val mTitles : Array<String> by lazy {
    arrayOf(
            ctx.getString(R.string.tab_title_android),
            ctx.getString(R.string.tab_title_ios),
            ctx.getString(R.string.tab_title_h5)
    )
}

// 声明一个延迟初始化的字符串
private val mStr : String by lazy{
    "我是延迟初始化字符串变量"
}

2、Kotlin之常量的用法

Kotlin中只用val修饰还不是常量,它只能是一个不能修改的变量。那么常量怎么定义呢?其实很简单,在val关键字前面加上const关键字。
即:

const val NUM_A = 6

其特点:const只能修饰val,不能修饰var
声明常量的三种正确方式

  • 在顶层声明
  • 在object修饰的类中声明,在kotlin中称为对象声明,它相当于Java中一种形式的单例类
  • 在伴生对象中声明
// 1. 顶层声明
const val NUM_A : String = "顶层声明"

// 2. 在object修饰的类中
object TestConst{
    const val NUM_B = "object修饰的类中"
}

// 3. 伴生对象中
class TestClass{
    companion object {
        const val NUM_C = "伴生对象中声明"
    }
}

fun main(args: Array<String>) {
    println("NUM_A => $NUM_A")
    println("NUM_B => ${TestConst.NUM_B}")
    println("NUM_C => ${TestClass.NUM_C}")
}

相关文章

网友评论

      本文标题:Kotlin学习笔记- 常量、变量

      本文链接:https://www.haomeiwen.com/subject/poaghqtx.html