Scala sealed trait as key on map throws mismatch error -
would me understand why not work? scala version 2.10
object colorenum { sealed trait color case object red extends color case object blue extends color case object green extends color } create map accepts color key , string value
val colormap = mutable.hashmap[colorenum.color, string]() put item on map using colorenum key
colormap.put(colorenum.red, "foo") this throws exception
error: type mismatch found: colorenum.red.type required: colorenum.color i must missing understanding of how should work.
thanks
summary:
of scala 2.11 (and preceding versions of scala 2.8) map's key type a in map[a, +b]. , map doesn't allow covariance when specifying key; i.e. notice how doesn't have plus (+) sign preceding it.
here's specific stackoverflow answer addresses details: https://stackoverflow.com/a/678637/501113
details:
trait, color, type defining map. , define 3 descendants of color trait. then, attempting insert these descendants of color trait (as opposed instance of trait itself) map. , type definition of map allows direct instances of color trait, not descendants (defined via extends or with).
you use .asinstanceof[color] when inserting descendant keys map in order conform map's type requirement key. however, warned using approach considered undesirable code smell.
bonus:
appears attempting define own typed enumeration. please @ this answer related question regarding defining enumerations in scala.
Comments
Post a Comment