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

dart 匿名 | 2020-08-01 20:18:21


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

为什么我不能使用类型变量作为泛型类的类型参数?
这是我的问题的一部分,通过将类型变量发送给构造函数很容易解决,但会使问题变得难看
class Injector{
Map _dependencyMappings;
//problem comes here
RegisterDependency(Type type,[Symbol name=#unnamed]){
//...
var mapping = new DependencyMapping(name);
}
}
class DependencyMapping{
//...
}
abstract class DependencyProvider {
//...
}
class ValueProvider implements DependencyProvider {
//...
}
class ClassProvider implements DependencyProvider {
//...
}
class SingletonProvider implements DependencyProvider {
//...
}






6 答案



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

2020-08-01 20:18:27
匿名


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

2020-08-03 01:24:31
匿名


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

2020-08-02 14:45:21
匿名


这还不支持。
有什么解释,我得查一下….

2020-08-01 20:18:30
匿名


这还不支持。
有什么解释,我得查一下….

2020-08-03 01:24:40
匿名


这还不支持。
有什么解释,我得查一下….

2020-08-02 14:45:47
匿名


World is powered by solitude
备案号:湘ICP备19012068号