[英]Property getter or setter expected in Kotlin
我正在从官方文档中学习Kotlin
,我正在尝试创建一个 class 来进行算术运算。
class Sum {
var a: Int, b: Int;
constructor(a: Int, b: Int) {
this.a = a
this.b = b
}
fun add(): Int {
return a + b
}
}
我有这个 class,现在我想创建一个 class 的 object
val sum = Sum(1,2)
Log.d("Sum", sum.add())
我在Sum
class 中收到此错误:
期望属性 getter 或 setter
b: int;
在行内var a: Int, b: Int;
var a: Int, b: Int;
Kotlin不允许在一行中有多个声明。 你必须去:
var a: Int
var b: Int
代替。 Kotlin人员简单地发现C / java实践中的“int a,b,..”是他们希望在Kotlin中不支持的东西。
您只需将变量声明为两行即可解决错误:
var a: Int
var b: Int
但是,建议的方法是将这些变量集成到构造函数中(如果您只想拥有一个带参数的构造函数):
class Sum(var a: Int, var b: Int) {
fun add(): Int = a + b
}
您正在课堂上编写不必要的代码。
如果只有一个,请为constructor
编写简短形式。
如果类中有属性,则可以使用val
或var
在constructor
定义它们。
使用如下:
class Sum (var a: Int,var b: Int){
fun add(): Int {
return a + b
}
}
请阅读Kotlin
基本语法 。
以下代码显示了如何在类中分配和操作变量
class Sum (var a: Int,var b: Int){
fun add(): Int= a + b //you can return the results directly.
}
您可以使用下面的主要测试您的代码。
fun main(args: Array<String>) {
var s= Sum(1,2)
print(s.add())
}
首先,您必须将属性声明放在单独的行上。 你可以在这里引用这个帖子 ,JetBrains的工程师yole说:
许多Java样式指南都不赞成在同一行上声明多个属性,因此我们没有在Kotlin中实现对该属性的支持。
一旦完成了单独行上的属性声明,你应该没有问题,因为kotlin genrates默认的getter和setter在内部具有与你的属性相同的可见性。 如果未指定任何可见性修饰符,则默认使用public,这意味着您的声明将随处可见。
事实上,Kotlin有一个简洁的语法,用于声明属性并从主构造函数初始化它们(如果你只有一个构造函数,它将始终是主要的):
class Sum(var a:Int,var b:Int) {
fun add(): Int {
return a + b
}
}
请参阅以下链接https://kotlinlang.org/docs/reference/classes.html中的官方文档中的构造函数列
出现此错误是因为
Kotlin 如果您在同一行声明甚至初始化 2 个字段变量,则不支持
kotlin中每个字段变量都有默认的setter和getter关联
因此,当您在同一行声明它们时,第一个变量使用默认的 setter 和 getter 初始化,但另一个变量期望您提供自己的 setter 和 getter,因为语法错误
错误可以通过两种方式解决
像这样分别声明setter和getter
var a:Int get() { return 0 } set(value) { val b = value }
更正语法
var a: Int var b: Int
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.