我正在嘗試在 Kotlin 中創建一個靜態陣列。為此,我創建了一個 Object 類,并在其中宣告了一個mutableListOf<PersonModel>().
當我嘗試向Object PersonModel陣列中添加新內容時,我在最后一行顯示紅色下劃線提示錯誤,即Expecting member declaration.
代碼
object Data {
val array = mutableListOf<PersonModel> (PersonModel("roshan",65,50,"White",21,"male"))
array.add(PersonModel("roshan",65,50,"White",21,"male"))
}
uj5u.com熱心網友回復:
您不能在物件/類宣告中使用任意可執行代碼。此代碼塊僅用于定義類成員。如果要在類實體化時執行一些代碼,可以使用初始化塊:
object Data {
val array = mutableListOf<PersonModel> (PersonModel("roshan",65,50,"White",21,"male"))
init {
array.add(PersonModel("roshan",65,50,"White",21,"male"))
}
}
如果您希望將成員的初始化代碼保留在一個地方,一種常見的模式是使用作用域函式,例如run()或apply():
val array = mutableListOf<PersonModel>().apply {
add(PersonModel("roshan",65,50,"White",21,"male"))
add(PersonModel("roshan",65,50,"White",21,"male"))
}
在您的特定情況下,您不必這樣做,因為您可以直接創建一個包含這兩個專案的串列:
val array = mutableListOf<PersonModel> (
PersonModel("roshan",65,50,"White",21,"male"),
PersonModel("roshan",65,50,"White",21,"male"),
)
uj5u.com熱心網友回復:
這是我的建議代碼:
// 放置物件類建構式 //
class PersonModel (var name: String, var a: Int, var b: Int, var color: String, var c: Int, var sex: String)
// 創建你的第一個物件 //
val array = mutableListOf<PersonModel>(PersonModel("roshan",65,50,"White",21,"male"))
// 添加第二個物件 //
array.add(PersonModel("minotiana",30,10,"White",21,"Male"))
uj5u.com熱心網友回復:
正如@Arpit Shukl在評論中所寫,不能將任意陳述句添加array.add(...)到物件(或類)宣告的主體中。
要在 Kotlin 中實作靜態初始化、全域可用的變數(或值),您有多種選擇。
頂層宣告
在 Kotlin 中,您可以在頂層宣告variables / uesval和fun操作,而無需包裝物件(或類)。
package com.example.models
val availablePersonModels = listOf(
PersonModel("roshan", 65, 50, "White", 21, "male")
)
import com.example.models.availablePersonModels
fun foo() {
for (availablePersonModel in availablePersonModels) {
println(availablePersonModel)
}
}
如果您希望能夠在初始化后從串列中添加/洗掉專案,只需listOf使用mutableListOf.
物件宣告
如果您想將多個宣告組合在一起或使宣告背景關系更明確,您可以將宣告包裝在object.
object ModelProvider {
val availablePersonModels = listOf(
PersonModel("roshan", 65, 50, "White", 21, "male")
)
}
import com.example.models.ModelProvider
fun foo() {
for (availablePersonModel in ModelProvider.availablePersonModels) {
println(availablePersonModel)
}
}
使用陳述句初始化靜態值
listOfandmutableListOf函式呼叫支持傳遞值以添加到 created ,因此List您不需要add(...)在初始化程序中呼叫。但是,情況并非總是如此。例如,可能有一些類需要用一個空的建構式進行實體化,然后通過呼叫 setter 來填充值。
class ExampleClass {
var x: Int? = null
var y: Int? = null
}
使用上面的物件宣告,您可能希望將此類呼叫添加到constructor中object,例如:
object ModelProvider {
val exampleValue = ExampleClass()
init {
exampleValue.x = 1
exampleValue.y = 1
}
}
除了像上面那樣拆分初始化和填充之外,您還可以對兩者使用單個運算式,例如使用范圍函式之一,例如apply:
val exampleValue = ExampleClass().apply {
x = 1
y = 1
}
當然,這也可以在 an 內部使用object,從而消除對init塊的需要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486417.html
下一篇:在套接字中發送和接收串列
