我有以下代码:
private lazy val keys: List[String] = obj.getKeys().asScala.toList
obj.getKeys
返回一个 java.util.Iterator<java.lang.String>
根据文档,通过导入的 JavaConverers
调用 asScala
方法。
java.util.Iterator <==> scala.collection.Iterator
scala.collection.Iterator
定义了
def toList: List[A]
所以基于这个,我认为应该可以工作,但是这里出现了编译错误:
[scalac] <file>.scala:11: error: type mismatch;
[scalac] found : List[?0] where type ?0
[scalac] required: List[String]
[scalac] private lazy val keys : List[String] = obj.getKeys().asScala.toList
[scalac] one error found
我知道 Java Iterator 的类型参数是 Java String,而我正在尝试创建一个 Scala 字符串列表,但是(也许天真地)认为会有隐式转换。
JavaConversions
上,但不在JavaConverters
上。它使用asScala
。许多人,包括我自己,更喜欢将此转换明确化以避免微妙的错误。 - Daniel C. Sobral