如何解决如何从dart flutter中的单个泛型类返回多种类型的类类型?
我有多个这样的课程:-
Class A {
static int xyz = 10;
int c;
int d;
static A getData() {
// Do something
return A()..c = xyz*5;
}
Class B {
static int abc = 10;
int c;
static B getData() {
// Do something
return B()..c = xyz*5;
}
因此,在这里您可以看到getData()
在做同样的事情,但是返回类型不同。
有什么方法可以避免这样的重复实现,是否可以通过定义一个可以引用该类并具有多个返回类型的函数来完成?
解决方法
这包括两个部分:创建对象和分配给对象的字段。
创建对象时,您大多不走运。在通用方法中创建特定类型的对象的唯一方法是通过dart:mirrors
使用反射。但是,您已经表明这是针对Flutter项目的,Flutter不支持反射,因此这不是一个选择。动态创建对象的唯一方法是传入工厂方法,泛型方法可以调用该方法来构造对象。
分配给对象的字段更容易,但是它要求您要么通过使用dynamic
要么通过将类与继承绑定在一起而丢失静态类型检查。后者是更可取的选择,但是如果您使用的是库,则并非总是这样。
结合这两件事,代码将如下所示:
class Foo {
static int xyz = 10;
int c;
}
class A extends Foo {
int d;
static A getData() {
return modifyObject(() => A());
}
}
class B extends Foo {
static B getData() {
return modifyObject(() => B());
}
}
T modifyObject<T extends Foo>(T create()) {
return create()..c = Foo.xyz * 5;
}
但是,在执行此操作之前,我先看一下您的项目是否真正需要它。如果您的用例像您的示例一样简单,我会认为这种泛化程度是过大的,并且您正在损害代码的可读性,而不是在帮助其模块化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。