声明必须是子类的类型变量-Dart
科特林代码:声明必须是子类的类型变量-Dart,dart,Dart,科特林代码: Class<? extends Model> someType(); 但是我希望“someType”只能是从模型类扩展而来的类型/类。不能直接实例化,因此任何用抽象类类型化的变量只能用子类初始化。这可能适合您的目的。Dart类型对象不是通用对象。只有一个类型类,无法比较它们的子类型。类型对象对于其他任何东西都是相当无用的 您可能根本不应该使用类型对象。 它们很少是你所需要的,因为它们在大多数情况下是完全无用的。如果您没有使用dart:mirrors,我建议您根本不要使
Class<? extends Model> someType();
但是我希望“someType”只能是从模型类扩展而来的类型/类。不能直接实例化,因此任何用抽象类类型化的变量只能用子类初始化。这可能适合您的目的。Dart
类型
对象不是通用对象。只有一个类型
类,无法比较它们的子类型。类型
对象对于其他任何东西都是相当无用的
您可能根本不应该使用类型
对象。
它们很少是你所需要的,因为它们在大多数情况下是完全无用的。如果您没有使用dart:mirrors
,我建议您根本不要使用Type
对象
那么,为什么首先要存储类型
值呢?
有没有办法将其存储为类型变量
比如说,为了创建该类型的列表,您需要知道该类型<代码>类型对象不能这样做,但可以使用适当的泛型类型变量
考虑有一个像这样的班级
类MyType{
常量MyType();
///使用[T]作为类型参数执行[action]。
R callWithType(R Function()action)=>action();
//检查和铸造。
布尔isInstance(对象o)=>o是T;
T cast(对象o)=>o作为T;
T安全广播(对象o)=>o为T?o:null;
//子类型检查。
布尔运算符>=(MyType other)=>其他为MyType;
布尔运算符其他>=此;
布尔运算符其他>=此&!(此>=其他);
布尔运算符>(MyType other)=>此>=其他&&!(其他>=此);
布尔运算符==(对象其他)=>
其他是MyType&&this>=其他&&other>=此;
int get hashCode=>T.hashCode;
//不管你想做什么手术。
}
然后,您可以使用这种“类型表示对象”而不是类型
对象,实际上您可以将其用于实际操作。然后,您还可以为受限类型请求MyType
对象:
MyType modelType;//仅“模型”的“MyType”对象
//或
无效withType(MyType类型。。。
您仍然只能执行类型变量支持的操作。您不能创建t
的新实例或查找类的静态成员,这些静态成员只能使用实际的类
Type someType;