我有以下方法,其中cards
的类型为Vector[Card]
。
由于cards
是一个字段,我想返回它的克隆。
我试过了:
class Deck(cards: Vector[Card] = Vector.empty[Card]) {
//other methods
def getCards(): Vector[Card] = {
return cards.clone()
}
}
然而,我得到了:
Error:(31, 18) method clone in class Object cannot be accessed in Vector[<error>]
Access to protected method clone not permitted because
prefix type Vector[<error>] does not conform to
class Deck in package genericGame where the access take place
return cards.clone()
^
那么如何克隆该字段呢?
答案 0 :(得分:3)
您不必,只需返回cards
,通常需要克隆可变对象,您需要获取对象的副本并独立于源处理它们,因为源可以在以后更改。
不是Vector
的情况,因为它是不可变的,你可以安全地保存对它的引用,它总是保持Card
的相同值,除非卡本身是可变的,然后您可以添加复制卡片的方法并执行map
。
class Card(var name:String){
def copy() = new Card(this.name)
}
val copy: Vector[Card] = vector.map(_.copy())
但正如我所说的,如果Card
是不可变的(例如case
类),则不需要这一切,那么你可以使用Vector
而无需任何副本。