在Scala中,从java.util.Set构建java.util.List

4

我希望能够基于Scala中的另一个Java集合(例如Set)创建一个Java List。

为什么这是不可能的?我遇到了 "required: scala.this.Int" 错误。

val in: java.util.Set[String] = new java.util.HashSet()
val out : java.util.List[String] = new java.util.ArrayList(in)

这种方法虽然可行,但感觉不太对:

val in: java.util.Set[String] = new java.util.HashSet()
val out: List[String] = new java.util.ArrayList()

out.addAll(in.asInstanceOf[java.util.Set[String]])

谢谢!


感谢您的回答!我注意到,如果Set的类型未指定(没有使用泛型),这也可以工作:val out: List[String] = new ArrayList[String](int.asInstanceOf[Set[String]]) - hammarback
谢谢你的问题 - 通过尝试回答它,我学到了很多关于Scala的知识。顺便说一句,如果有人回答了你的问题,点赞或接受他们的答案是礼貌的。(虽然我没有回答,但我很感激那些回答的人) - Nick Fortescue
已在 Trac https://lampsvn.epfl.ch/trac/scala/ticket/2119 中提交。 - James Iry
谢谢你的指引,Nick!这是我第一次来这里 :-) - hammarback
2个回答

2
您需要明确传递ArrayList类型变量。
这样做是可以的:
val in = new java.util.HashSet[String]
val out = new java.util.ArrayList[String](in)

2

这个有效:

val in: java.util.Set[String] = new java.util.HashSet()
val out : java.util.List[String] = new java.util.ArrayList[String](in)

我认为问题与类型擦除有关,因为ArrayList不像Scala数组那样具有参数化,而是存在类型。这可能使类型推断变得不可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接