为什么不能将Type变量用作泛型类的Type参数

时间:2015-01-21 05:14:52

标签: dart

class Cage<T>{
  Cage();
}

class Chicken{
  Chicken();
}

main() {
  Type t= Chicken;
  var cage = new Cage<t>();        //Does not work
  var cage2 = new Cage<Chicken>(); //Works
}

为什么我不能将Type变量用作泛型类的Type参数?

这是我的问题的一部分,通过将类型变量发送到构造函数但很难解决,很容易解决

class Injector{
  Map<Symbol, DependencyMapping> _dependencyMappings;

  //problem comes here
  RegisterDependency(Type type,[Symbol name=#unnamed]){
     //...
     var mapping = new DependencyMapping<type>(name);
  } 

}

class DependencyMapping<T>{
  //...
}

abstract class DependencyProvider<T> {
  //...
}

class ValueProvider<T> implements DependencyProvider {
  //...
}

class ClassProvider<T> implements DependencyProvider {
  //...
}

class SingletonProvider<T> implements DependencyProvider {
  //...
}

2 个答案:

答案 0 :(得分:7)

这在今天的Dart中是不可能的。参数化类型(诸如List之类的东西)可以采用文字类型(例如,List)或类型参数(例如,其中T被声明为泛型中的类型参数的List,如在Cage中)作为参数。它们不能采用任意表达式,即使它们是Type类型。像t这样的变量可能包含一个Type(如你的例子中所示),但一般来说很难确定。它可以很容易地保存非类型值,例如数字3,因为Dart的类型系统不能保证具有静态类型Type的东西确实是Type。如果我们让这些通过,系统将彻底;损坏。我们可以为此添加运行时检查,但这会影响性能。

答案 1 :(得分:1)

尚未支持此功能。

某处有一些解释,我不得不查一查......