我有一个Java方法,签名看起来像:
public Map<String, ?> getData() {
return data;
}
我正在尝试将此返回值作为Scala方法的参数:
import java.util.{Map => jMap}
def myMethod(m: jMap[String, Any]): Unit = {
// do stuff
}
// myMethod(foo.getData())
这样,编译器会抱怨:
found : java.util.Map[String,?0] where type ?0
required: java.util.Map[String,Any]
?
是什么,以及它的Scala等价于什么?
当我尝试:
def myMethod(m: jMap[String, ?]): Unit = {
// do stuff
}
该错误:
not found: type ?
信息:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)
Maven home: /usr/share/maven
Java version: 1.8.0_152, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_152/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.19.76-linuxkit", arch: "amd64", family: "unix"
虽然可能不是规范的或最有效的解决方案,但最终我将Java映射转换为Scala映射,并用_
代替了Any
。请注意,默认情况下.asScala
会生成一个可变映射。
import collection.JavaConverters._
import scala.collection.mutable
def myMethod(m: mutable.Map[String, _]): Unit = {
// ...
myMethod(obj.getData().asScala)