想要写一个重载的方法:
insertBatch(sql: String, params: Seq[Seq[String]])
insertBatch(sql: String, params: Seq[Map[String,String]])
提示方法重复。
于是想用Any:
insertBatch(sql: String, params: Seq[Any])
函数的定义是可以定义,但是这个params的第二个维度要怎么使用?怎么样作为Map或者Seq来使用?总是提示“Type mismatch”。
SF的答题能力不行呢。
同样的问题,在stackoverflow问,一个小时内就有答案了。
How can I overload functions with generic parameters in scala
出现这个报错的原因是由于JVM的“type erasure”(泛型擦除)机制导致的。
解决办法有两个:
可以使用 scala.reflect.runtime.universe.typeTag 来推断数据类型从而进行处理。具体实现可以参考Scala模式匹配泛型类型擦除问题,但是由于线程不安全的问题,这个方法很鸡肋,实际应用中基本无用。
由于本题目的特殊性(第二维是两种不同的类型),可以直接使用T代替被擦除的类型,在函数体内对直接判断即可。
另外,采用1中参考链接文章的解决办法应该也可以尝试处理,本人并未做深刻尝试,不敢妄下定论。
贴一下最终实现代码: