Java泛型<?>以及如何在Scala中处理它?

ace*_*ace 0 scala

我有一个API(来自第三方java库),看起来像:

    public List<?> getByXPath(String xpathExpr)
Run Code Online (Sandbox Code Playgroud)

在名为DomNode的类上定义

我在scala函数中尝试这个:

1: def removeChild(node: DomNode, xpath: String) {
2:               val lst: List[?] =  node.getByXPath(xpath)
3:      val child: DomNode = lst(0)
4:                child.getParentNode().removeChild(child)
    }
Run Code Online (Sandbox Code Playgroud)

但它不会在scala中编译.我在第2行得到错误.

根据答案,我修改了它,现在它是:

1: def removeChild(node: DomNode, xpath: String) {
2:            val lst = node.getByXPath(xpath)
3:            val child = lst(0).asInstanceOf[DomNode]            
4:            child.getParentNode().removeChild(child)
    }
Run Code Online (Sandbox Code Playgroud)

现在我在第3行得到错误:java.util.List类型的lst [?0]不接受参数

我也尝试了val lst: List[_] = node.getByXPath(xpath) 但是这给了我同样的错误:

type mismatch;
 found : java.util.List[?0] where type ?0
 required: scala.List[_]
Run Code Online (Sandbox Code Playgroud)

所以我仍然被困住了.

dav*_*420 5

在第3行重新判断你的错误:记住它是一个Java列表,而不是Scala列表,所以试试吧

val child = lst.get(0).asInstanceOf[DomNode]
Run Code Online (Sandbox Code Playgroud)