我有一个 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
我怎样才能克服它并添加 SomeObject
至 OldFashined
?
最佳答案
好吧,我不敢相信我的 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/