美文网首页
3. Kotlin属性与字段

3. Kotlin属性与字段

作者: 努力生活的西鱼 | 来源:发表于2019-10-28 09:54 被阅读0次
Kotlin

属性与字段

声明属性

属性既可以使用关键字var声明为可变的,也可以用关键字val声明为只读的。

class Person {

    var name: String = firstName;

    var age: Int = 18;

    var city: String = "SH";
    
}

Getters和Setters方法

Kotlin中,GettersSetters方法是可选的,你如果没有在代码中创建它们,它是会默认自动生成。

class Property {

    var str:String? = null;

    var count:Int = 123;

}

初始化器(initializer),gettersetter都是可选的。
属性类型如果可以从初始化器(或者从其getter返回值)中推断出来,也可以省略。

 可变属性
var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]
 只读属性
val <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]

幕后字段

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

// 注意:这个初始器直接为幕后字段赋值
var counter = 0 
set(value) {
    if (value >= 0) field = value
}

幕后字段主要用于自定义settergetter中,并且只能在gettersetter中访问。

class Property {

    var str: String? = null
        get() {
            return field;
        }
        set(value) {
            field = value
        }

    var count: Int = 123
        get() {
            return field;
        }
        set(value) {
            field = value;
        }

}

幕后属性

对外表现为只读,对内表现为可读可写。

class Property {

    private var _table: Map<String, Int>? = null;

    public val table: Map<String,Int>
        get() {
            if (_table == null) {
                _table = HashMap(); // 类型参数已推断出
            }

            return _table ?: throw AssertionError("Set to null by another thread");
        }

}

_table属性声明为private,因此外部是不能访问的,内部可以访问,外部访问通过table属性,而table属性的值,取决于_table,这里_table就是幕后属性。

编译期常量

已知值的属性可以使用const修饰符标记为编译期常量。

延迟初始化属性与变量

一般地,属性声明为非空类型必须要在构造函数中初始化。然而这经常不方便。

为处理这种情况,你可以用lateinit修饰符标记该属性:

public class MyTest {
    lateinit var subject: TestSubject
    @SetUp fun setup() {
        subject = TestSubject()
    }
    @Test fun test() {
        subject.method() // 直接解引⽤
    }
}

该修饰符只能用于在类体中的属性(不是在主构造函数中声明的var属性,并且仅当该属性没有自定义getter和setter时),而自Kotlin1.2起,也用于顶层属性与局部变量。该属性或变量必须为非空类型,并且不能是原生类型。

相关文章

  • 3. Kotlin属性与字段

    属性与字段 声明属性 属性既可以使用关键字var声明为可变的,也可以用关键字val声明为只读的。 Getters和...

  • Kotlin学习手册(八)内联函数let、with、run、ap

    Kotlin系列导读 Kotlin学习手册(一)类与继承Kotlin学习手册(二)属性与字段Kotlin学习手册(...

  • Kotlin学习手册(一)类与继承

    Kotlin系列导读 Kotlin学习手册(一)类与继承Kotlin学习手册(二)属性与字段Kotlin学习手册(...

  • Kotlin学习手册(十)带你真正理解什么是Kotlin协程

    Kotlin系列导读 Kotlin学习手册(一)类与继承Kotlin学习手册(二)属性与字段Kotlin学习手册(...

  • Kotlin 属性与字段

    声明属性 Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的。 使...

  • kotlin属性与字段

    借鉴kotlin中文站 声明属性 Kotlin类中声明属性,即可用关键字var声明成可变的,又可以用关键字val声...

  • kotlin属性与字段

    一:声明属性 kotlin类中属性可以使用关键字var也可以使用val,使用一个属性只需要在类实例后引用即可 二:...

  • kotlin的属性与字段

    属性与字段 在kotlin中声明属性可以用var,val声明,其中var声明的是一个可变的变量,val声明是只读的...

  • Kotlin-属性与字段

    属性 声明属性 Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的...

  • Kotlin的属性和字段

    Kotlin的属性相当于Java的字段再加上getter和setter方法。 一、读写属性和只读属性 Kotlin...

网友评论

      本文标题:3. Kotlin属性与字段

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