Swift 到 Kotlin,管理不可变列表
Swift to Kotlin, manage immutable list
我正在尝试将现有的 Swift 代码移植到 Kotlin,我想对以下 Swift 代码使用最佳实践:
struct Deck {
private(set) var cards: [Card]
var cardsCount: Int {
return self.cards.count
}
init(cards: [Card] = []) {
self.cards = cards
}
mutating func add(card: Card) {
self.cards.append(card)
}
}
设计目标是:
cards
属性 在 class 之外是不可修改的,所以它的类型应该是 List<Card>
fun add(card: Card)
应该修改内部 cards
列表
有没有一种方法可以在 Kotlin 中实现这一点而无需使用两个单独的属性 - 一个 private var mutableCards: MutableList<Card>
和一个计算 属性 val cards: List<Card> get() = this.mutableCards
我需要一些针对这种情况的最佳实践。
由于只读 List
也是 "under the hood" 也是一个 ,您可能希望利用强制转换为 MutableList
,这样做:
class Card {
}
class Deck(cards:List<Card>){
var cards:List<Card>
init {
this.cards = cards
}
public fun add(card:Card) {
(cards as MutableList<Card>).add(card)
}
}
fun main(args: Array<String>) {
var cards:List<Card> = arrayListOf()
// here I can't modify cards
var deck = Deck(cards)
deck.add(Card())
print(deck.cards.count()) // printing 1
}
为了能够对其进行测试,请复制并粘贴 here。
我正在尝试将现有的 Swift 代码移植到 Kotlin,我想对以下 Swift 代码使用最佳实践:
struct Deck {
private(set) var cards: [Card]
var cardsCount: Int {
return self.cards.count
}
init(cards: [Card] = []) {
self.cards = cards
}
mutating func add(card: Card) {
self.cards.append(card)
}
}
设计目标是:
cards
属性 在 class 之外是不可修改的,所以它的类型应该是List<Card>
fun add(card: Card)
应该修改内部cards
列表
有没有一种方法可以在 Kotlin 中实现这一点而无需使用两个单独的属性 - 一个 private var mutableCards: MutableList<Card>
和一个计算 属性 val cards: List<Card> get() = this.mutableCards
我需要一些针对这种情况的最佳实践。
由于只读 List
也是 "under the hood" 也是一个 MutableList
,这样做:
class Card {
}
class Deck(cards:List<Card>){
var cards:List<Card>
init {
this.cards = cards
}
public fun add(card:Card) {
(cards as MutableList<Card>).add(card)
}
}
fun main(args: Array<String>) {
var cards:List<Card> = arrayListOf()
// here I can't modify cards
var deck = Deck(cards)
deck.add(Card())
print(deck.cards.count()) // printing 1
}
为了能够对其进行测试,请复制并粘贴 here。