我真的ambigous類型在Scala中掙扎......與ambigous類型掙扎在斯卡拉
我想實現一個StackManager持有不同類型的多個棧......但有些事情似乎是錯誤的。
object StackManager {
val stacks = mutable.HashMap[String, mutable.Stack[_]]()
def get[T](id: String): mutable.Stack[T] = {
stacks.get(id) match {
case Some(stack: mutable.Stack[T]) => stack
case None => {
val newStack = mutable.Stack[T]()
stacks.put(id, newStack)
newStack
}
}
}
def set[T](id: String, stack: mutable.Stack[T]) {
stacks.put(id, stack)
}
}
編輯:隨着我想要存儲不同類型堆在我的經理:
StackManager.set[ClassA]("stack01", new mutable.Stack[ClassA]())
StackManager.set[ClassB]("stack02", new mutable.Stack[ClassB]())
StackManager.get[ClassA]("stack01") // returns the stack with type mutable.Stack[ClassA]
StackManager.get[ClassB]("stack02") // returns the stack with type mutable.Stack[ClassB]
EDIT2:斯卡拉版本2.9.2
Scala使用類型擦除,所以你不能寫'Some(stack:mutable.Stack [T])',你應該使用'Some( stack:mutable.Stack [_])'而不是 – crybird
如果你的stacks.get(id)匹配匹配現有的不同類型的堆棧(不是T),你會怎麼做? – Ashalynd