概述
要想使用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-属性和赋值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复