在 Scala 中从 java.util.Set 构造 java.util.List

发布于 2024-07-26 04:18:47 字数 467 浏览 3 评论 0原文

我想创建一个基于另一个java集合的java列表,例如。 以斯卡拉为背景。

为什么这是不可能的? 我收到 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]])

谢谢!

I would like to create a java List based on another java Collection eg. Set in Scala.

Why is this not possible? I get a required: scala.this.Int error.

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

This worked however, but doesn't feel right:

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]])

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假扮的天使 2024-08-02 04:18:47

您需要显式传递 ArrayList 类型变量。

这工作正常:

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

You'll need to explicitly pass the ArrayList type variable.

This works fine:

val in = new java.util.HashSet[String]
val out = new java.util.ArrayList[String](in)
长梦不多时 2024-08-02 04:18:47

这是可行的:

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

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

This works:

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

I assume the problem is somehow related to type erasure, as ArrayList is not parametrized as a Scala array would be, but, rather, it's an existential type. This is probably making the type inference impossible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文