我开始学习kotlin,但是在实现getter和setter时遇到了问题,我在网上搜索了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
进行编译。
发布于 2021-05-15 09:29:20
你似乎真的很喜欢添加分号,你试着把它们添加到任何地方。但是,在本例中添加它们太早了:
var name: Int = 10;
get(){
println("getting value");
return field;
}
set(value){
println("setting value");
field = value;
}
整个过程声明了一个名为name
的属性,所以在var name: Int = 10
之后不应该有分号。
您错误地添加了分号,使解析器认为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
}
https://stackoverflow.com/questions/67545157
复制相似问题