Тебе вообще не нужен твой собственный класс. А поскольку ваши значения хранятся как динамические, вам нужен только один экземпляр карты для каждого типа ключа. Если это нежелательно, вы можете изменить его обратно на количество экземпляров на значение, но тогда зачем использовать динамические значения? В любом случае, вот версия карты, которая работает для всех целей.
@:multiType
abstract MyMap<K, V>(Map<K, Dynamic>) {
public function new();
public inline function set(k:K, v:V) this.set(k, v);
public inline function get(k:K) return this.get(k);
public static var string_map = new Map<String, Dynamic>();
@:to static inline function toStringMap<K:String>(t:Map<K, Dynamic>) {
return string_map;
}
public static var int_map = new Map<Int, Dynamic>();
@:to static inline function toIntMap<K:Int>(t:Map<K, Dynamic>) {
return int_map;
}
public static var object_map = new Map<{}, Dynamic>();
@:to static inline function toObjectMap<K:{}>(t:Map<K, Dynamic>) {
return object_map;
}
}
var i = new MyMap<String, Int>();
i.set("zero", 0);
trace(Type.getClassName(Type.getClass(i))); //haxe.ds.StringMap
trace(i); // {zero => 0}
var s = new MyMap<String, String>();
s.set("one", "1");
trace(Type.getClassName(Type.getClass(s))); //haxe.ds.StringMap
trace(s); // {zero => 0, one => 1}
// var v:Int = i.get("one") will fail on Java and HL
// we let v to infer as Null<Dynamic> instead
var v = i.get("one");
trace(v);