[英]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.