scala中基于条件的重载构造函数

scala中基于条件的重载构造函数,scala,constructor,Scala,Constructor,我有一个simpleNode类,有两个输入,u只能填充其中一个,这两个都是Scala中的Map,但我必须检查maps中的数据类型,以填充任何输入 我为此编写的代码是: class SimpleNode ( val uriTriples: collection.mutable.Map[String, List[String]] = collection.mutable.Map.empty, val valueTriples: collection.mutable.Map[String, M

我有一个simpleNode类,有两个输入,u只能填充其中一个,这两个都是Scala中的Map,但我必须检查maps中的数据类型,以填充任何输入

我为此编写的代码是:

class SimpleNode (
  val uriTriples: collection.mutable.Map[String, List[String]] = collection.mutable.Map.empty,
  val valueTriples: collection.mutable.Map[String, Map[String,String]] = collection.mutable.Map.empty
                ) 
  {              
    def this(map:collection.mutable.Map) = {
      map.values.head match {
      case uri : List[String] => this(uris,null) 
      case values : Map[String,String] => this(null,values)
      case _=>
    }
  }
}
我总是面对错误:

a:34: error: 'this' expected but identifier found.
[INFO]        map.values.head match {
[INFO]        ^                       

消除歧义的常用策略:

class SimpleNode (
  val uriTriples: collection.mutable.Map[String, List[String]] = collection.mutable.Map.empty,
  val valueTriples: collection.mutable.Map[String, Map[String,String]] = collection.mutable.Map.empty
)
  {
    def this(map:mutable.Map[String, List[String]]) = this(map, null)
    def this(map:mutable.Map[String, Map[String,String]])(implicit d: DummyImplicit) = this(null, map)
}
或者工厂更为步行:

object SimpleNode {
  def apply(...) = ???
}

@布莱恩,这是我尝试过的,但没有看到开关盒的例子,所以我面临着这个错误,是不是在scala中重复了Dummy隐式复制?@HadyElsahar,据我所知不多@HadyElsahar我以为你的意思是不赞成。