【发布时间】:2012-09-20 12:27:17
【问题描述】:
我有一个案例类,以 Seq[T] 作为参数:
case class MyClass(value: Seq[T])
我现在希望能够写作
MyClass(t1,t2,t3)
所以我定义了
object MyClass {
def apply(value: T*) = new MyClass(value.toSeq)
}
不行,因为case类定义了
object MyClass {
def apply(value: Seq[T])
}
和Seq[T]和T*擦除后的类型相同,所以不能重载。
但我想允许两种访问方式。两种方式都应该允许:
MyClass(t1,t2,t3)
MyClass(some_seq_of_T)
由于 Seq[T] 和 T* 几乎是同一类型(至少在擦除之后;并且在具有参数 T* 的函数内部变为 Seq[T]),我认为应该有一种方法可以同时允许两种方式调用它。
有吗?
【问题讨论】:
-
是具体类型还是你的
MyClass有类型参数?
标签: scala types overloading type-erasure