2015-01-21 105 views
3
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 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 { 
    //... 
} 

回答

5

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

1

这不是(还)支持。

有一些解释的地方,我得看看它....

+0

ahah现在我需要将11个类更改为非泛型,并将该类型赋予构造函数! – FPGA 2015-01-21 05:19:49

+0

我以为记得阅读这个,但还没有找到任何东西。 – 2015-01-21 06:33:14

+0

不是一个问题,只是想确保它不可能 – FPGA 2015-01-21 06:44:48

相关问题