美文网首页
kotlin(一):基本语法之属性

kotlin(一):基本语法之属性

作者: 小川君 | 来源:发表于2018-08-31 19:44 被阅读0次
    属性修饰符
    kotlin中,使用‘var’、‘val’来修饰属性,其中val修饰的是常量,相当于‘final’,var修饰变量,
    一个属性必有这两个关键字其中一个来修饰   
    ```
    var s;
    val s: Int = 0
    ```
    
    属性命中规范:

    java中通过 属性类型 属性名 = 属性值; 的方式来声明属性

    String str = "chuan";
    

    kotlin中则通过 属性修饰符 属性名: 属性类型 = 属性值的方式来声明属性

    index: Int = 0
    
    set/get函数

    声明一个属性完整的语法是(以var为例):

    var index: Int = 0
        get() = this
        set(intValue){
            this = intValue
        }
        
    使用文字说明就是
    
    属性修饰符 属性名称: 属性类型 = 属性初始值
        get函数
        set函数
    
    其中 属性类型可以省略,当然是在可以根据属性初始值判断出属性类型的前提下
    属性初始值以及set、get函数也可以省略
    如下
    var index1 = 0
    
    var index2: Int 
    index2 = 0
    
    var index3: Int = 0
    
    最后再加上前面的那个表达式 
    var index4: Int = 0
        get() = field
        set(intValue){
            field = intValue
        }
    其中field代表当前属性本身的值,且只能使用在访问器(个人觉得即set/get方法中)
    
    前面几个表达式中少了这样一种命名方式:var index5: Int
    有修饰符、属性名以及属性类型,但是没有属性值
    当然我们可以使用 var index5: Int? = null ,但是这并不是我们当前小节所需要的,
    我们需要的是没有等于号后面的乱七八糟的东西,接着往下看
    
    延迟初始化属性与懒加载

    对于上面的问题,我们可以使用lateinit来解决
    lateinit 意为延迟初始化,即在编译期检查时并不会因未初始化而报错,相应的,我们需要在引用之前进行初始化

    lateinit var index: String
    

    注意:

    1、lateinit只能用来修饰对象,不能用来修饰基本类型,因为基本类型在类加载后都会有一个默认的初始值,
        String既是基本类型又是数据类型
    
    2、lateinit修饰的属性,只能是成员属性,即类属性
    
    3、必须是var修饰且该属性没有自定义的get/set方法
    

    与lateinit相对是懒加载by lazy

    val str: String by lazy{
        "str init by 'by lazy'"
    }
    

    {}中的最后一行为返回值 即str的值为"str init by 'by lazy'"

    by lazy懒加载即在第一次引用的时候才会进行初始化,(跟java内部类单例是不是有点相同的味道)在初始化过程中如果消耗大量资源时,会非常受用

    这里说到了单例,就顺便写一下ktolin下的单例
    
    public class Singleton private constructor() {
    
        companion object {
            val instance: = Singleton()
        }
    }
    
    

    companion object 意为伴生对象,具体的我也不清楚,但是可以理解为java中的static关键字是没有错的,静态方法

     companion object {
            fun getCurrentVersion(): String {
                return xxxx
            }
        }
    

    关于private constructor可以理解为是类的构造器,关于类的会在后面说到

    空属性的创建

    kotlin号称永不抛出空指针异常,相应的就需要我们对待空对象时有相应的处理

    var str: String? = null
    

    ?在这条语句中代表可为空 str?.toString()str?代表str不为空时会调用后面的函数,如果为空则不调用

    相关文章

      网友评论

          本文标题:kotlin(一):基本语法之属性

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