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)
    }
}

设计目标是:

  1. cards 属性 在 class 之外是不可修改的,所以它的类型应该是 List<Card>

  2. 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