我正在尝试将现有的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
属性在类外无法修改,因此其类型应为List<Card>
fun add(card: Card)
应修改内部cards
列表
有没有办法在Kotlin中实现这一点而不使用两个单独的属性 - 一个private var mutableCards: MutableList<Card>
和一个计算属性val cards: List<Card> get() = this.mutableCards
对于这种情况,我需要一些最佳实践。
答案 0 :(得分:0)
由于只读List
是&#34;引擎盖下#34;也是一个mutable list,您可能希望利用转换为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。