有时,我会处理包含以下内容的java:
def printDbl(d:Double) { println("dbl: " + d) }
def printInt(i:Int) { println("int: " + i) }
自然,我想把它包装在一些 scala 中,最终看起来像这样:
def print[T:Manifest] (t:T) {
if (manifest[T] <:< manifest[Int]) { printInt(t.asInstanceOf[Int]) ; return }
if (manifest[T] <:< manifest[Double]) { printDbl(t.asInstanceOf[Double]) ; return }
throw new UnsupportedOperationException("not implemented: " + manifest[T])
}
但是当我运行以下命令时,我得到一个运行时异常:
print(1)
print(2.0)
print("hello")
我似乎记得有一种方法可以在编译时捕获它,但我似乎无法用谷歌搜索它。也许一些巧妙的隐含转换?