我是靠谱客的博主 懵懂魔镜,最近开发中收集的这篇文章主要介绍Kotlin-属性和赋值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

要想使用kotlin的各个属性,先得声明Kotlin类

变量

Kotlin中类的属性可以用var或者val关键字进行声明,其中var为可变属性,val为只读属性(相当于Java的final)。

class Student {
    var name = "名字" //名字属性可变,用var
    val birthday = "1994-10-26" //生日属性不可变,用val
}

像上面这样就简单的为Student类声明了name和birthday两个属性,且在声明属性时进行了初始化,按照Kotlin的类型推断特点,name和birthday就是属于String类型。现在我想为Student类添加一个age属性,但是我并不想在声明时进行初始化,用Java写起来非常简单即可实现

public class JavaStudent {
    private String name = "名字";
    private String birthday = "1994-10-26";
    private int age;//Java版的实现
}

按照Java的实现套路直接套入Kotlin你会发现IDE直接报错并提示property must be initialized or be abstract

按照提示我们必须把类和字段都声明为abstract才可以通过编译。
abstract class Student {
    var name = "名字" //名字属性可变,用var
    val birthday = "1994-10-26" //生日属性不可变,用val
    abstract var age: Int
}

这样未免太过麻烦,而且理解起来也非常奇怪。Kotlin提供了延迟初始化的方式来解决初始化的问题,使用关键字lateinit即可,这样就无需声明abstract了。

可惜使用lateinit延迟初始化age之后,IDE依旧报错,这次提示的内容是lateinit modifier is not allowed on primitive type properties。Kotlin并不支持对原生类型进行lateinit,为什么呢?因为Kotlin会使用null来对每一个用lateinit修饰的属性做初始化,而基础类型是没有null类型,所以无法使用lateinit。这点很好理解,就像可以把int型变量赋值为0,却无法赋值为null一样。所以这里为了通过IDE的编译,我们可以采用两种方案,要么还是直接在age声明时进行初始化,要么不用基础类型来定义age。

class Student {
    var name = "名字" //名字属性可变,用var
    val birthday = "1994-10-26" //生日属性不可变,用val
    var age = 0 //直接使用0初始化age,age为Int型
    lateinit var ageStr: String //String不是基础类型,可以使用lateinit初始化
}

 

最后

以上就是懵懂魔镜为你收集整理的Kotlin-属性和赋值的全部内容,希望文章能够帮你解决Kotlin-属性和赋值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部