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

Why can't i use Type variable as a Type parameter to a generic class

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
}

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

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

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 {
  //...
}

这(还)不受支持。

哪里有解释,我得查查....

这在今天的 Dart 中是不可能的。

参数化类型(如 List<int>)可以采用文字类型(例如 List<Chicken>)或 type 参数(例如 List<T> 其中 T在泛型中被声明为 type 参数,就像在 Cage 中一样)作为参数。他们不能采用任意表达式,即使是 type Type.

t 之类的变量可能包含 Type (如您的示例所示),但通常很难确定这一点。它可以很容易地保存一个非类型值,例如数字 3,因为 Dart 的类型系统不保证静态类型 Type 确实是一个 Type.

如果我们让这些通过,系统将被彻底破坏。我们可以为此添加运行时检查,但这会影响性能。