gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:47:41 24 4
gpt4 key购买 nike

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

最佳答案

Dart目前无法做到这一点。
参数化类型(例如List<int>之类的东西)可以采用文字类型(例如List<Chicken>)或type参数(例如List<T>,其中T在通用中声明为type参数,如在Cage中一样)作为参数。即使它们是type Type,它们也不能采用任意表达式。
诸如t之类的变量可能包含一个Type(如您的示例),但总的来说,确实很难确定这一点。它可以轻松地保存非数字值(例如数字3),因为Dart的类型系统不能保证静态类型Type的确是Type
如果我们让这些漏洞通过,则系统将被彻底破坏。我们可以为此添加运行时检查,但这会影响性能。

关于dart - 为什么我不能使用Type变量作为泛型类的Type参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28060094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com