Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 列表属性继承_Dart - Fatal编程技术网

Dart 列表属性继承

Dart 列表属性继承,dart,Dart,解析器抱怨属性继承器.list不是ModelList.list的子类型,但LeadsGroup确实从模型继承。 这是错的吗?正确的方法是什么 我的基类: abstract class ModelList { List<Model> get list; set list(List<Model> n); } 抽象类模型列表{ 列表获取列表; 设置列表(列表n); } 继承人: class ListLeadsGroup extends ModelList {

解析器抱怨属性继承器.list不是ModelList.list的子类型,但LeadsGroup确实从模型继承。 这是错的吗?正确的方法是什么

我的基类:

abstract class ModelList {
    List<Model> get list;
    set list(List<Model> n);
}
抽象类模型列表{
列表获取列表;
设置列表(列表n);
}
继承人:

class ListLeadsGroup extends ModelList {
    List<LeadsGroup> list;
}

class LeadsGroup extends Model {
}
class ListLeadsGroup扩展了ModelList{
名单;
}
类LeadsGroup扩展模型{
}
如果您有类似的代码

class Foo extends ModelList {}

ModelList ml = new ListLeadsGroup();
ml.list.add(new Foo());
ml.list
属于
Model
类型,因此添加
Foo
应该是合法的。 但这很可能不是您想要的。
这就是为什么
List
无法覆盖
List

这应该满足您的要求:

abstract class ModelList<T extends Model> {
    List<T> get list;
    set list(List<T> n);
}

class ListLeadsGroup extends ModelList<LeadsGroup> {
    List<LeadsGroup> list;
}

class LeadsGroup extends Model {
}
抽象类模型列表{
列表获取列表;
设置列表(列表n);
}
类ListLeadsGroup扩展了ModelList{
名单;
}
类LeadsGroup扩展模型{
}
刚刚抄袭了马坦·卢利对吉特的评论

import'包:func/func.dart';
类模型注册表{
最终_工厂={};
模型创建(类型)=>_工厂[类型]();
无效寄存器(类型,工厂型号()){
_工厂[类型]=工厂;
}
}
main(){
var registry=newmodelregistry();
register(FooModel,()=>newfoomodel());
var foo=registry.create(FooModel);
}
如果你有这样的代码

class Foo extends ModelList {}

ModelList ml = new ListLeadsGroup();
ml.list.add(new Foo());
ml.list
属于
Model
类型,因此添加
Foo
应该是合法的。 但这很可能不是您想要的。
这就是为什么
List
无法覆盖
List

这应该满足您的要求:

abstract class ModelList<T extends Model> {
    List<T> get list;
    set list(List<T> n);
}

class ListLeadsGroup extends ModelList<LeadsGroup> {
    List<LeadsGroup> list;
}

class LeadsGroup extends Model {
}
抽象类模型列表{
列表获取列表;
设置列表(列表n);
}
类ListLeadsGroup扩展了ModelList{
名单;
}
类LeadsGroup扩展模型{
}
刚刚抄袭了马坦·卢利对吉特的评论

import'包:func/func.dart';
类模型注册表{
最终_工厂={};
模型创建(类型)=>_工厂[类型]();
无效寄存器(类型,工厂型号()){
_工厂[类型]=工厂;
}
}
main(){
var registry=newmodelregistry();
register(FooModel,()=>newfoomodel());
var foo=registry.create(FooModel);
}

找到了使用新关键字
协变的解决方案
。现在,扩展ModelList的类可以覆盖
列表
列表而不发出警告

@serializable
abstract class ModelList extends ModifiedModel
        implements Model {
    Type get listType {
        throw new UnimplementedError();
    }

    List<Model> get list;
    set list(covariant List n);
}
@serializable
抽象类ModelList扩展了ModifiedModel
实现模型{
类型获取列表类型{
抛出新的未实现错误();
}
列表获取列表;
集合列表(协变列表n);
}

找到了使用新关键字
协变的解决方案。现在,扩展ModelList的类可以覆盖
列表
列表而不发出警告

@serializable
abstract class ModelList extends ModifiedModel
        implements Model {
    Type get listType {
        throw new UnimplementedError();
    }

    List<Model> get list;
    set list(covariant List n);
}
@serializable
抽象类ModelList扩展了ModifiedModel
实现模型{
类型获取列表类型{
抛出新的未实现错误();
}
列表获取列表;
集合列表(协变列表n);
}

不幸的是,问题在于我无法使用reflectable生成ModelList的动态实例,也无法找到THi Gunter的运行时类型,我是否可以使用reflectable和this?我认为这种逻辑将引导我在长期内创建另一个可反射系统,但我不确定你想用可反射系统做什么。对于浏览器应用程序,也不鼓励使用反射,而在颤振中根本不支持。我的应用程序在浏览器应用程序和服务器之间共享模型(同一类)。其想法是从服务器接收json并将其转换为一个对象,该对象将通过ngModel等附加到表单。服务器还希望将大多数帖子转换为在控制器内使用的对象。也许将来我会把它改成转换器或者更硬的代码,但是,反射现在给了我生产时间,我只是创建一个工厂方法注册表。不幸的是,问题是我不能使用reflectable生成ModelList的动态实例,也不能找到THi Gunter的runtimeType,我能使用可反射的和这个吗?我认为这种逻辑将引导我在长期内创建另一个可反射系统,但我不确定你想用可反射系统做什么。对于浏览器应用程序,也不鼓励使用反射,而在颤振中根本不支持。我的应用程序在浏览器应用程序和服务器之间共享模型(同一类)。其想法是从服务器接收json并将其转换为一个对象,该对象将通过ngModel等附加到表单。服务器还希望将大多数帖子转换为在控制器内使用的对象。也许将来我会把它改成一个转换器或者其他更硬编码的东西,但是,反射现在给了我生产时间,我只需要创建一个工厂方法的注册表。