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