【发布时间】:2011-03-26 05:45:21
【问题描述】:
我知道类型擦除使它们在运行时在类型方面看起来相等,因此:
class Bar {
def foo[A](xs: A*) { xs.foreach(println) }
def foo[A, B](xs: (A, B)*) { xs.foreach(x => println(x._1 + " - " + x._2)) }
}
给出以下编译器错误:
<console>:7: error: double definition:
method foo:[A,B](xs: (A, B)*)Unit and
method foo:[A](xs: A*)Unit at line 6
have same type after erasure: (xs: Seq)Unit
def foo[A,B](xs: (A, B)*) { xs.foreach(x => println(x._1 + " - " + x._2)
) }
^
但是有没有简单的方法可以写:
bar.foo(1, 2, 3)
bar.foo(1 -> 2, 3 -> 4)
并让它们调用不同的重载版本的 foo,而不必显式命名它们:
bar.fooInts(1, 2, 3)
bar.fooPairs(1 -> 2, 3 -> 4)
标签: scala overloading type-erasure