- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是Flutter和Dart的新手,来自本地Android。
Android有一个非常好的数据库抽象架构,称为Room Persistence Library。据我所知,使用MVVM / MVC设计模式的Flutter没有这样的数据库抽象体系结构。
我的解决方案是自己创建Dart版本。经过几次头痛之后,我几乎完成了所有工作,但似乎无法使LiveData
使用泛型正常工作。
我像这样设置类(class):
class LiveData<T> {
...
}
Object
或
List<Object>
。我发现了一个巧妙的技巧,可以区分
T
和两者:
...
// Parse response
// This checks if the type is an instance of a single entity or a list.
if (entity is T) {
cachedData = rawData.isEmpty ? null : entity.fromMap(rawData.first) as T;
} else {
cachedData = rawData.map((e) => entity.fromMap(e)).toList() as T;
}
...
cachedData = rawData.map((e) => entity.fromMap(e)).toList() as T;
- Unhandled Exception: type 'List<Entity>' is not a subtype of type 'List<Vehicle>' in type cast
Entity
类时,如何将
Vehicle
转换为
Vehicle
。仅将其实例分配给
Entity entity
变量。
Vehicle
的访问:
final Entity entity;
...assign Vehicle instance to entity...
print(entity is Vehicle) // True
.runtimeType
无济于事。我还考虑过将
LiveData
分为两个类,第二个是
LiveDataList
。尽管这似乎是不对代码进行错误检查的最简单解决方案,但它可能会打扰我(故意是双关语)并破坏原本非常漂亮的Room端口。
LiveData
。
final T Function(List<Map<String, dynamic>> rawData) builder;
cachedData
,而不是之前的代码。
// Parse response
cachedData = builder(rawData);
LiveData<List<Vehicle>>
中的所有车辆时,调用
Dao<Vehicle>
的构造函数是:
class VehicleDao implements Dao<Vehicle> {
...
static LiveData<List<Vehicle>> get() {
return LiveData<List<Vehicle>>(
...
(rawData) => rawData.map((e) => Vehicle.fromMap(e)).toList(),
...
);
}
}
最佳答案
在Dart中(实际上在许多语言中),泛型都带有继承的概念。您会认为,如果Bar
继承自Foo
,那么该List<Bar>
也将可转换为List<Foo>
。
实际上,由于泛型的工作原理,情况并非如此。当您有通用类时,每次您使用具有不同类型的该类时,该类型都被视为完全独立的类。这是因为当编译器编译这些类型时,class MyGenericType<Foo> extends BaseClass
和class MyGenericType<Bar> extends BaseClass
基本上会转换为class MyGenericType_Foo extends BaseClass
和class MyGenericType_Bar extends BaseClass
之类的东西。
看到问题了吗? MyGenericType_Foo
和MyGenericType_Bar
不是彼此的后代。他们是彼此的 sibling ,都从BaseClass
扩展。这就是为什么当您尝试将List<Entity>
转换为List<Vehicle>
时,强制转换不起作用的原因,因为它们是同级类型,而不是父类(super class)型和子类型。
综上所述,虽然不能基于通用类型参数的关系将一种通用类型直接转换为另一种通用类型,但是对于List
,有一种方法可以将一种List
类型转换为另一种类型:cast
方法。
List<Entity> entityList = <Entity>[...];
List<Vehicle> vehicleList = entityList.cast<Vehicle>(); // This cast will work
关于sqlite - Dart-使用泛型将List <SuperType>转换为List <SubType>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60461815/
与 public class SuperType { } 和 public class TestClass { public void doSomething() { List
我有一个 OO 问题,我认为它可以追溯到通用协方差。我正在尝试构建一个用于导入不同类型记录的模块化系统...模块包含常用方法,而 SalesModule 包含处理特定逻辑的函数... public i
这个问题已经有答案了: What is PECS (Producer Extends Consumer Super)? (16 个回答) Is List a subclass of List? Why
假设我有以下数据库结构: 产品表中的product_id是自动递增的 如何在 Products 表以及 Amazon_Books 或 Starbucks_Products 中插入某些内容而不丢失对 P
简介: 我已经为数据库过滤器构建了一个类层次结构: class Filter { } class PropertyFilter extends Filter { Boolean exists;
我需要测试一个实例是否完全属于给定类型。但是,如果针对父类(super class)型测试子类型(情况 3),instanceof 似乎也会返回 true。我以前从来不知道这一点,我很惊讶。我在这里做
我目前正在使用一个使用子类型/父类(super class)型结构的数据库。我想知道处理 INSERT 的最佳方法。我是将多个表的数量保存在 SQL 本身中,还是使用 PHP,甚至是两者的组合? 我正
我是Flutter和Dart的新手,来自本地Android。 Android有一个非常好的数据库抽象架构,称为Room Persistence Library。据我所知,使用MVVM / MVC设计模
我的印象是,可以为 Flow 中的不精确对象类型提供一个具有未在该类型中声明的属性的对象,只要该类型中声明的所有属性都存在即可。 Flow 中不准确的对象类型声明表示“对象可以具有这些属性中的任何一个
假设 B 类继承自 A 类。 那么这样写有什么好处: A myClassA = new B(); 有什么区别: B myClassA = new B(); 最佳答案 这是接口(interface)(或
为什么这段代码不能编译? public class A { public class B extends A { public B(A a) { } } voi
为什么这段代码不能编译? public class A { public class B extends A { public B(A a) { } } voi
我有一个带有 Equals 方法的集合类,我想传入一个方法来在每个项目之间进行相等性检查。此外,我希望允许委托(delegate)类型对 T 的父类(super class)以及 T 本身进行操作:
应用@tailrec 我从scala 编译器中得到错误:“无法优化@tailrec 注释方法get:它包含一个递归调用,目标是父类(super class)型case _ => tail.get(n-
在我的公司,我们有一个固定的 JSON 消息结构: { "headerVal1": "" "headerVal2": "" "customPayload": {
当我尝试查询使用 Hibernate 映射的实体时,JSF Web 应用程序抛出异常(见下文)。我究竟做错了什么?或者这是 Hibernate 中的一个错误?我该如何解决这个问题?感谢您的帮助:) 以
我有以下三个类的配置: Class1有一些方法,其中一些是抽象的: package package1; public abstract class class1{ protected abst
为菜鸟问题道歉,但是我对Scala还是很陌生。 我有以下Scala类(class): class Test { class Request {def getValue(): String =
错误:无法解析以下类的父类(super class)型。请确保您在类路径中具有必需的依赖项: 没有任何类别列表,它给出了错误 我正在开发图书馆。为此,我创建了一个类,并将其用于演示应用程序导入。当我实
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我是一名优秀的程序员,十分优秀!