kotlin - 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
.
解决方案
您似乎真的很喜欢添加分号,并且您尝试将它们添加到任何地方。但是,在这种情况下,您过早地添加了它们:
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
}
推荐阅读
- flutter - future 方法在 null - flutter 中被调用
- c++ - 使用 reinterpret_cast 通过引用传递值
- terraform - 运行 EMR 作业流程时出错:ValidationException
- web-scraping - Python 从网络标头请求 403 Forbidden referer
- docker - 如何在 Host 模式下使用服务名访问容器?
- android - 如何在 Jetpack Compose 中使用图标切换按钮?
- image - 对 kubernetes 映像进行 prisma 扫描,其中 pip 易受攻击
- android - 测试使用导航的 Android 片段
- postgresql - 使用默认自定义集群安装 PostgreSQL 11
- arrays - MongoDB 在删除/订单更改时更改数据的索引