kotlin - 属性和字段

时间:2023-02-06 15:43:09

前言

这个是本人在学习kotlin 在官网看的相关的知识的总结

属性

声明属性:使用val声明一个不可变的属性,通过var声明一个可变的属性

//这是一个不可变的属性
val string:String = ....
//这是一个可变的属性
var string2:String=...

属性使用:要使用属性可以通过名称直接应用

class Person(val name:String,val age:Int)

fun main(args:Array<String>){
   val person = Person("栾桂明",12)
   println("这个人的名称是"+person.name)
}

属性创建的完整语法:

  var  <属性名称> [:<属性类型>] [=<属性的初始化> ]
 [<getter>] [<setter>]  

/*** * 下边的这段代码会报错 因为属性的初始化的时候的getter setter 方法是默认包含的 这里没有属性的 * 初始化器,所以会报错 */
// var alldefault :Int?
/*** * 数据的可以默认的推断出来 */
var initialized = 1

/*** * 一个只读属性的语法和一个可变的属性的语法有两方面的不同:1、只读属性的用 val开始代替var 2、只读属性不允许 setter */

class Demo1() {
    val simple: Int?

    init {
        simple = 1
    }
}

val inferredType = 1
// 自定义get方法
val string: String get() = string.toString()

//自定义的getter和setter方法
var string2: String
    get() = "初始化字符串"
    set(value) {
        string2 = value
    }

幕后字段

在kotlin中不能直接声明字段,当属性需要一个幕后字段的时候kotlin会自动的提供,这个幕后字段可以通过field标识符在访问器中访问(field 字段是能在属性的访问器中使用)

var string = 0
  set(value)={
       if(value>0){
        field = value
     }
  }

如果属性至少一个访问器使用默认实现,或者自定义访问器通过 field 引用幕后字段,将会为该属性生成一个幕后字段

幕后属性

此处有点没看懂,

编译器常量

定义:已知数值的属性可以使用const修饰符标记为 编译器常量

要求:
1:位于顶层或者是object的成员
2:使用String或者原生的数据类型初始化
3:没有自定义getter方法