等同于Java'?'在Scala中

问题描述 投票:1回答:1

我有一个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
1个回答
1
投票

虽然可能不是规范的或最有效的解决方案,但最终我将Java映射转换为Scala映射,并用_代替了Any。请注意,默认情况下.asScala会生成一个可变映射。

import collection.JavaConverters._
import scala.collection.mutable

def myMethod(m: mutable.Map[String, _]): Unit = {
// ...

myMethod(obj.getData().asScala)
© www.soinside.com 2019 - 2024. All rights reserved.