为什么我不能将 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
.
如果我们让这些通过,系统将被彻底破坏。我们可以为此添加运行时检查,但这会影响性能。
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
.
如果我们让这些通过,系统将被彻底破坏。我们可以为此添加运行时检查,但这会影响性能。