奇怪的scala java互操作性行为

时间:2015-07-10 19:33:46

标签: java scala generics intellij-idea

我遇到了以下Java编译器警告问题(使用IntelliJ 14):

我的Scala库中有以下类:

object ScalatoJava {
  def  asJava[A,B](map: Map[A,B]): java.util.Map[A,B] = { map.asJava }

  def  asJava[A](list: List[A]): java.util.Collection[A] = {list.asJavaCollection}
}

我用它在我的Java程序中转换来自Scala的少量集合。

现在在我的Java程序中,我有以下代码,其中IntelliJ是红色的基础,声明它无法解决问题:

private final java.util.Map<String, FieldSettings> poolpartyfieldsettings =
    ScalatoJava.asJava(poolpartyConnectorSettings.fieldsSettingsMap());

它说它无法解决方法asJava(scala.collection.immutable.Map<String, org.....FieldSettings>)

如果我写的话

private final java.util.Map <String, FieldSettings> poolpartyfieldsettings =
    ScalatoJava.asJava((scala.collection.immutable.Map<String, FieldSettings>)poolpartyConnectorSettings.fieldsSettingsMap());

scala.collection.immutable.Map<String, FieldSettings> poolpartyfieldsettings =
    poolpartyConnectorSettings.fieldsSettingsMap();
ScalatoJava.asJava(poolpartyfieldsettings)

编译器没有抱怨。

这是PoolpartyConnectorSettings Scala类:

trait DspacePoolPartyConnectorSettings {
  def poolpartyServerSettings : PoolpartySettings
  def fieldsSettingsList      : List[FieldSettings]
  def fieldsSettingsMap       : Map[String, FieldSettings]
}
case class DspaceDspacePoolPartyConnectorSettingImpl (configUri: String) extends DspacePoolPartyConnectorSettings {
      private val config                 = ConfigFactory.parseURL(new URL(configUri)).resolve()
      private val configFieldSettinglist = config.getConfigList("PoolPartyConnectorSettings.FieldSettings").asScala.toList
      private val configPoolPartySetting = config.getConfig("PoolPartyConnectorSettings.PoolPartySettings")

      val poolpartyServerSettings        = PoolpartySettings( configPoolPartySetting.getString("apirootEndpoint"),
                                                              configPoolPartySetting.getString("thesaurusapiEndpoint"),
                                                              configPoolPartySetting.getString("extratorapiEndpoint"),
                                                              configPoolPartySetting.getString("coreProjectId"),
                                                              configPoolPartySetting.getString("coreThesaurusUri"),
                                                              configPoolPartySetting.getString("jelProjectId"),
                                                              configPoolPartySetting.getString("jelThesaurusUri"))

      val fieldsSettingsList             =  configFieldSettinglist map { e =>
                                                      FieldSettings(e.getString("fieldname"), e.getBoolean("treeBrowser"),
                                                      e.getBoolean("multilanguage"), e.getStringList("languages").asScala.toList,
                                                      e.getBoolean("closed"), e.getString("scheme"), e.getString("poolpartyProjectId"))
      }

      val fieldsSettingsMap = Map(fieldsSettingsList map {e => (e.fieldName, e)}: _*)
    }

知道问题可能是什么?

0 个答案:

没有答案