1

I ran into the following Java compiler warning issue (using IntelliJ 14):

I have the following class in my Scala library:

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}
}

I use it to convert few collections coming from Scala in my Java program.

Now in my Java program I have the following code for which IntelliJ is underlying in red stating that it can't resolve things:

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

It says it can not resolve the method asJava(scala.collection.immutable.Map<String, org.....FieldSettings>).

While if I write either

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

or

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

the compiler does not complain.

Here is the PoolpartyConnectorSettings Scala class:

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)}: _*)
    }

Any idea what the problem might be?

Dan Getz
  • 8,774
  • 6
  • 30
  • 64
MaatDeamon
  • 9,532
  • 9
  • 60
  • 127
  • Do you have the line `import scala.collection.immutable.Map` in any of your files? Without that line, the default meaning of `Map` is `scala.collection.Map`. Every `immutable.Map` is of type `collection.Map`, but not the other way around. – Dan Getz Jul 10 '15 at 21:47
  • Also, have you looked into [`JavaConverters`](http://stackoverflow.com/q/8301947/3004881)? – Dan Getz Jul 10 '15 at 21:53
  • Is this a real compiler error or just IntelliJ highlight? – ghik Jul 11 '15 at 09:00
  • Thank @DanGetz it worked – MaatDeamon Jul 13 '15 at 17:18

0 Answers0