首页 > 解决方案 > kotlin getter 和 setter 期望成员声明错误?

问题描述

我开始学习 kotlin,但在实现我在网上搜索的 getter 和 setter 时遇到问题,而且我的 getter 和 setter 的代码与许多指南使用的相同。

package com.test
import kotlin.Int

class Test{

    var name: Int = 10;
    get(){
        println("getting value");
        return field;
    }
    set(value){
        println("setting value");
        field = value;   
    }
}

fun main() {
    val test = Test();
    println(test.name);
}

我看不出这段代码有什么问题导致 kotlin 编译器发出错误。我正在使用kotlinc proj.kt.

标签: kotlinobjectgetter-setter

解决方案


您似乎真的很喜欢添加分号,并且您尝试将它们添加到任何地方。但是,在这种情况下,您过早地添加了它们:

var name: Int = 10;
get(){
    println("getting value");
    return field;
}
set(value){
    println("setting value");
    field = value;
}

整个事情声明了一个名为的属性name,所以后面不应该有分号var name: Int = 10

您错误添加的分号使解析器认为 for 的声明在name那里结束,因此解析器期望在那之后再进行另一个声明。你写的不是另一个声明,get() { ...这只有在你声明一个属性时才对解析器有意义,但就解析器而言,此时你并没有声明一个属性,因为你的声明name已经完成分号。

如果必须添加分号,则应在}of之后set(value),如下所示:

var name: Int = 10
get(){
    println("getting value");
    return field;
}
set(value){
    println("setting value");
    field = value;
};

另请参阅属性声明的语法

但是,请注意Kotlin 编码约定说您应该尽可能省略分号,因此您应该省略所有分号,如下所示:

var name: Int = 10
get(){
    println("getting value")
    return field
}
set(value){
    println("setting value")
    field = value
}

推荐阅读