Class alias in scala

后端 未结 1 870
悲&欢浪女
悲&欢浪女 2021-01-04 08:50

Is it possible in Scala to define MyAlias[A] as an alias for MyClass[String, A]. For example, MyAlias[Int] would refer to Map[St

1条回答
  •  囚心锁ツ
    2021-01-04 09:21

    Note that Map is a trait, not a class.

    You can still alias it using the type keyword:

    type StringMap[A] = Map[String, A]
    
    val myMap: StringMap[Int] = Map("a" -> 1)
    

    This can be done within the scope of a class, object or trait definition (and in the scope of any method or expression).

    Sometimes you'll want the alias to be private to its declaring scope, purely as a convenience for your implementation code. If you want the type to be usable generally, Package Objects come in useful:

    package object mypackage {
      type StringMap[A] = Map[String, A]
    }
    

    Because Map is a trait (and associated companion object) and not a class, you won't be able to use it directly to create instances:

    val myMap = new StringMap[Int]
    // error: trait Map is abstract; cannot be instantiated
    

    If you alias a class, though, you can still use the new keyword:

    type StringHashMap[A] = HashMap[String, A]
    val myMap = new StringHashMap[Int]
    

    0 讨论(0)
提交回复
热议问题