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

FPG*_*PGA 5 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
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能将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 {
  //...
}
Run Code Online (Sandbox Code Playgroud)

小智 7

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