0
'適用'メソッドを理解しようとしています。渡された引数に応じてList、Array、Setのいずれかを返すクラスを作成したいと思います。コードはListとSetで動作しますが、Arrayでは動作しません。私は、あなたが新しいArray[A]
をインスタンス化するClassTag[A]
を必要とする問題にクラスから配列を返すことができません
class CollectionFactory [A](s:String){}
object CollectionFactory {
def apply[A](s: String): Traversable[A] = {
s match {
case "list" => {
List[A]()
}
//this doesnt work. It seems using [A] is incorrect. How do I specify the type?
/*
case "array" => {
new Array[A](1)
}
*/
case _ => {
Set[A]() }
}
}
}
val c = CollectionFactory[Int]("list")
c: Traversable[Int] = List()
CollectionFactory[String]("list")
res0: Traversable[String] = List()
CollectionFactory[Boolean]("")
res1: Traversable[Boolean] = Set()
#1は問題ではありません:それは暗黙のうちに 'Traversable' – Dima
@Dima良い点を_is_ WrappedArray'、'に変換されます。 –