如何显示后备字段中的值

时间:2019-08-14 18:00:11

标签: kotlin backing-field

我喜欢运行下面提到的简单示例。 eclipse产生错误说:

main class cant be found or loaded

请让我知道如何解决此错误以及为什么会发生 在下面的代码中,我试图使用背景字段。但是,它们在代码中的使用方式无法提供预期的输出。 请参阅输出部分。

如何显示背景字段的输出

代码

fun main(args: Array<String>) {
println("Hello, World!")

    val p1 = Person_1("jack", 21);
    p1.lastName = "stephan"
    p1.month = "may"
    println("lastName is ${p1.getLastName}")
    println("month is ${p1.getMonth}")


    val p2 = Person_1("jack", 21);
    p2.lastName = "knauth"
    p2.month = "june"
    println(p2.getLastName)
    println(p2.getMonth)

class Person_1 (val name: String, val age : Int) {

//backing field 1
var lastName : String? = null
set(value) {
    if (value?.length == 0) throw IllegalArgumentException("negative values are not allowed")
    field = value
}

val getLastName
get() = {
    lastName
}


//backing field 2
var month : String? = null
set(value) {
    field = value
}

val getMonth
get() = {
    month
}
}

输出

Hello, World!
lastName is () -> kotlin.String?
month is () -> kotlin.String?
() -> kotlin.String?
() -> kotlin.String?

1 个答案:

答案 0 :(得分:1)

您可以像这样摆脱吸气剂:

class Person_1 (val name: String, val age : Int) {

    //backing field 1
    var lastName : String? = null
        set(value) {
            if (value?.length == 0) throw IllegalArgumentException("negative values are not allowed")
            field = value
        }

    //backing field 2
    var month : String? = null
        set(value) {
            field = value
        }
}

如果以后需要它们,您可以像这样添加它,而无需更改api:

var lastName : String? = null
    get() = field
    set(value) {
        if (value?.length == 0) throw IllegalArgumentException("negative values are not allowed")
        field = value
    }