Swift到Kotlin,管理一成不变的名单

我试图移植一个现有的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) } } 

设计目标是:

  1. cards属性在类之外是不可修改的,所以它的types应该是List

  2. fun add(card: Card)应该修改内部cards列表

有没有一种方法来实现这个Kotlin没有使用两个单独的属性 – 一个private var mutableCards: MutableList和一个计算属性val cards: List get() = this.mutableCards

对于这种情况,我需要一些最佳实践。

由于只读List是“ MutableList ”,也是一个可变列表 ,所以您可能需要利用对MutableList ,这样做:

 class Card { } class Deck(cards:List){ var cards:List init { this.cards = cards } public fun add(card:Card) { (cards as MutableList).add(card) } } fun main(args: Array) { var cards:List = arrayListOf() // here I can't modify cards var deck = Deck(cards) deck.add(Card()) print(deck.cards.count()) // printing 1 } 

能够测试它, 在这里复制和粘贴。