内部数据类
Inner data classes
谁能给我一些关于数据 classes 的小建议。我发现 Kotlin 的学习曲线非常陡峭,但我进展缓慢。
我有一个数据class:
data class newGame(
val gamename: String,
val gamedate: String,
val players: List<Player>
) {
data class Player(
val player: String,
val player_id: Int,
val score: Int,
val points: Int
)
}
我可以创建外部 (newGame) 的实例 class,但我很难掌握如何添加玩家。我以为我可以做类似的事情:
var gm: newGame
gm.gamename = GamesList.text.toString()
val p = newGame.Player
p.player = Player1.text.toString()
gm.players.add p
但是 Android Studio 说我需要一个伴生对象,但我不确定它的外观如何
界面看起来像:
interface CreateGame {
@POST("new")
fun addNewGame(
@Query("operation") operation: String,
@Body() newGame: newGame
): Call<gameEvent>
companion object {
fun create(): CreateGame {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BaseURL)
.build()
return retrofit.create(CreateGame::class.java)
}
}
我知道伴随对象 create() 如何创建游戏实例,但我不知道我需要写什么才能将玩家添加到内部 class。
有人可以指点一下吗?
嵌套class和内部class是有区别的。
嵌套 class 不能与内部 class 做同样的事情。内部 class 具有对其外部 class 实例的隐式引用。嵌套的 class 没有。
I can create an instance of the outer (newGame) class, but I'm
struggling to get to grips with how I add Players. I thought I could
do something like:
嗯,首先理解val
和var
这两个术语。 属性 gamename
是 val 这意味着它是只读的,要编写它你必须将它设为 var
,所有其他属性也是如此。 players
应为 mutableListOf
或 ArrayList<>
类型,以便稍后修改。 List
是不可变的,也就是说初始化后不能添加。
data class newGame(
var gamename: String,
var gamedate: String,
var players: ArrayList<Player>
)
data class Player(
var player: String,
var player_id: Int,
var score: Int,
var points: Int
)
现在在你的情况下,你需要添加一个辅助构造函数或初始化所有属性,同时声明如下
data class newGame(
var gamename: String? = null,
var gamedate: String? = null,
var players: ArrayList<Player> = ArrayList()
)
data class Player(
var player: String?=null,
var player_id: Int?=null,
var score: Int?=null,
var points: Int?=0
)
主要class
var gm: newGame = newGame()
gm.gamename = "GamesList.text.toString()"
val p = Player()
p.player = "Player1.text.toString()"
gm.players.add(p)
您拥有的是 nested class,我认为您的用例不需要这种结构。您只需将 Player
class 移到 newGame
class 之外。然后你可以创建 newGame
的对象为
// Create Player objects by passing appropriate values to the constructor
val playerA = Player(player = "A", player_id = 1, score = 50, points = 50)
val playerB = Player(player = "B", player_id = 2, score = 60, points = 80)
// Create a newGame
val newGame = newGame(gamename = "MyGameName", gamedate = "GameDate", players = listOf(playerA, playerB))
谁能给我一些关于数据 classes 的小建议。我发现 Kotlin 的学习曲线非常陡峭,但我进展缓慢。
我有一个数据class:
data class newGame(
val gamename: String,
val gamedate: String,
val players: List<Player>
) {
data class Player(
val player: String,
val player_id: Int,
val score: Int,
val points: Int
)
}
我可以创建外部 (newGame) 的实例 class,但我很难掌握如何添加玩家。我以为我可以做类似的事情:
var gm: newGame
gm.gamename = GamesList.text.toString()
val p = newGame.Player
p.player = Player1.text.toString()
gm.players.add p
但是 Android Studio 说我需要一个伴生对象,但我不确定它的外观如何
界面看起来像:
interface CreateGame {
@POST("new")
fun addNewGame(
@Query("operation") operation: String,
@Body() newGame: newGame
): Call<gameEvent>
companion object {
fun create(): CreateGame {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BaseURL)
.build()
return retrofit.create(CreateGame::class.java)
}
}
我知道伴随对象 create() 如何创建游戏实例,但我不知道我需要写什么才能将玩家添加到内部 class。
有人可以指点一下吗?
嵌套class和内部class是有区别的。 嵌套 class 不能与内部 class 做同样的事情。内部 class 具有对其外部 class 实例的隐式引用。嵌套的 class 没有。
I can create an instance of the outer (newGame) class, but I'm struggling to get to grips with how I add Players. I thought I could do something like:
嗯,首先理解val
和var
这两个术语。 属性 gamename
是 val 这意味着它是只读的,要编写它你必须将它设为 var
,所有其他属性也是如此。 players
应为 mutableListOf
或 ArrayList<>
类型,以便稍后修改。 List
是不可变的,也就是说初始化后不能添加。
data class newGame(
var gamename: String,
var gamedate: String,
var players: ArrayList<Player>
)
data class Player(
var player: String,
var player_id: Int,
var score: Int,
var points: Int
)
现在在你的情况下,你需要添加一个辅助构造函数或初始化所有属性,同时声明如下
data class newGame(
var gamename: String? = null,
var gamedate: String? = null,
var players: ArrayList<Player> = ArrayList()
)
data class Player(
var player: String?=null,
var player_id: Int?=null,
var score: Int?=null,
var points: Int?=0
)
主要class
var gm: newGame = newGame()
gm.gamename = "GamesList.text.toString()"
val p = Player()
p.player = "Player1.text.toString()"
gm.players.add(p)
您拥有的是 nested class,我认为您的用例不需要这种结构。您只需将 Player
class 移到 newGame
class 之外。然后你可以创建 newGame
的对象为
// Create Player objects by passing appropriate values to the constructor
val playerA = Player(player = "A", player_id = 1, score = 50, points = 50)
val playerB = Player(player = "B", player_id = 2, score = 60, points = 80)
// Create a newGame
val newGame = newGame(gamename = "MyGameName", gamedate = "GameDate", players = listOf(playerA, playerB))