我正在将一些 Java 代码移植到 Dart,它大量使用了这些类型的映射:
Map<Class<? extends SomeClass>, SomeOtherClass> map = new HashMap<>();
目前这在飞镖中似乎是不可能的。我知道有一个引入第一级类型的提议:http: //news.dartlang.org/2012/06/proposal-for-first-class-types-in-dart.html这将引入
class Type {
@native String toString();
String descriptor(){...} // return the simple name of the type
}
所以在这个提议得到实施之前,我已经创建了以下类:
class Type {
final String classname;
const Type(this.classname);
String descriptor() => classname;
}
我需要它的类有一个简单的get方法
abstract Type get type();
这样我就可以Type
像使用真实的一样使用我的Type
,稍后切换我只需要删除我的解决方法。
我的问题:在引入真正的课程之前,是否有一些做这种映射的飞镖方式(我没有看到)或者我这样做的方式是一种合理的解决方法Type
?
Dart 1.0 更新
可以这样做:
var map = new Map<Type, SomeOtherClass>();
// either
map[SomeOtherClass] = new SomeOtherClass();
// or
var instance = new SomeOtherClass();
map[instance.runtimeType] = instance;