【发布时间】:2014-02-01 08:23:02
【问题描述】:
我很好奇为什么会发生错误:
scala> import collection.JavaConverters._
import collection.JavaConverters._
scala> val m = Map("one"->1)
m: scala.collection.immutable.Map[String,Int] = Map(one -> 1)
scala> val jm = m.asJava
jm: java.util.Map[String,Int] = {one=1}
scala> val hm = new java.util.Hashtable(jm)
<console>:12: error: type mismatch;
found : java.util.Map[String,Int]
required: Int
val hm = new java.util.Hashtable(jm)
^
scala> import java.util._
import java.util._
scala> val hm: Dictionary[String,Int] = new java.util.Hashtable(jm)
hm: java.util.Dictionary[String,Int] = {one=1}
原问题是here.
这里已经太晚了,无法查看超载。
不正确的推测:
它必须在采用 int 或集合的构造函数之间进行选择。看起来,对于多态方法,具有更具体结果类型的方法更具体。也许,Hashtable<K, V>() 比 Hashtable<String, Integer> 更具体,因为 <K,V> 可能比 <String, Integer> 更具体,但反之亦然。
不,这是不对的:
implicitly[Hashtable[String,Integer] <:< Hashtable[_,_]]
ctor其实是
public Hashtable(Map<? extends K, ? extends V> t)
【问题讨论】:
-
不知道为什么它想不通,但是可以告诉它怎么做:
new java.util.Hashtable[String,Int](Map("one" -> 1).asJava)为我跑。 -
也可以
val hm: java.util.Map[String,Int] = ... -
看起来像是多态 Java 类、重载等问题。尝试最小化一个示例以与
j.u.HashMap隔离。 -
正如我之前所说,如果 @retronym 正在帮助解决 SO,那么一些非常重要的工作就没有完成。除非这在道德上等同于 Retronym 的水冷却器。我会尽量减少和弥补时间的浪费。
标签: scala