java - 如何将对象添加到未参数化的 Java 列表?

标签 java scala interop

我有一个 Java 对象 OldFashioned扩展 Java 1.4 List :

[Java] 
class OldFashioned extends List { ... }

OldFashioned不接受任何类型参数。我需要添加 SomeObject给它。在 Java 中没有问题,因为它处理 List 1.4 作为 List<Object> 1.5 并允许添加 Object 的任何子类到集合。但是斯卡拉没有。所以下一个代码不起作用:

[Scala]
val oldFashioned = new OldFashioned()
oldFashioned.add(new SomeObject)       // found: SomeObject; required: E

也就是说,Scala 编译器 需要将类型参数传递给 OldFashioned这实际上并没有带他们:

[Scala]
var oldFashioned: OldFashioned[SomeObject] = null    // OldFashioned does not take type parameters

我怎样才能克服它并添加 SomeObjectOldFashined

最佳答案

好吧,我不敢相信我的 earlier question在这里找到一个用法(你应该去投票 agilesteel 的 answer )

def add(oldFashioned: OldFashioned, any: Any): Boolean = oldFashioned match {
  case l: java.util.List[a] => l.add(any.asInstanceOf[a])
}

val oldFashioned = new OldFashioned
// oldFashioned: OldFashioned = []

add(oldFashioned, "test")
// res0: Boolean = true
add(oldFashioned, 1)
// res1: Boolean = true
add(oldFashioned, new Object)
// res2: Boolean = true

oldFashioned
// res3: OldFashioned = [test, 1, java.lang.Object@1db8f8e]

编辑:我猜只要我要投:

oldFashioned.asInstanceOf[java.util.List[SomeObject]].add(new SomeObject)

关于java - 如何将对象添加到未参数化的 Java 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7577082/

相关文章:

java - 将对象数组映射到 Int 数组

java - 如何使用 Spring Security Oauth 忽略某些端点

scala - 将json正文添加到http4s请求

c# - 如何从 C# 编辑或取消保护 protected Excel 工作表中的单个单元格?

c# - DTSearch COM Interop - 如何向 C# 公开对象?

java - JMS - 从一个消费者到多个消费者

scala - 顺序 Play Play框架中的Set

scala - 解释 Haskell 中的柯里化(Currying)实现

interface - 当可调用是 Clojure 函数时,从 ScheduledFutureTask 获取 nil 而不是返回值

java - 将按钮高度和宽度设置为包装内容并填充父级