dart - 如何在另一个类的另一个混合中使用一个类的混合方法
问题描述
我有class B
哪个对象class A
作为成员字段。而且我想class A
访问class B
. 我尝试了以下但它不起作用。
https://dartpad.dev/?id=2af929e713c46e9b853aee84f4407007&null_safety=true
class A {}
class B {
final A objOfA;
const B(this.objOfA);
}
mixin MixedA on A {
void someNewMethod() {
// do something
}
}
mixin MixedB on B {
void someMethod() {
objOfA.someNewMethod(); // <-- error
}
}
解决方案
mixin MixedB on B
意味着使用的类MixedB
只知道派生自B
. 类B
不保证其objOfA
成员是MixedA
. 您的一些选择:
通过将其
B
声明objOfA
为MixedA
:final MixedA objOfA;
如果你不能无条件地声明
objOfA
为 aMixedA
,也许你可以使B
generic 并 makeMixedB
require 一个专门的基类型:class B<DerivedA extends A> { final DerivedA objOfA; const B(this.objOfA); } mixin MixedB on B<MixedA> { // ... }
MixedB
执行运行时检查:mixin MixedB on B { void someMethod() { final objOfA = this.objOfA; if (objOfA is MixedA) { objOfA.someNewMethod(); } } }
如果您可以亲自保证
objOfA
将始终使用MixedA
whenMixedB
(但您不能提供静态的编译时保证),则可以进行MixedB
覆盖objOfA
并将其强制转换为MixedB
:mixin MixedB on B { @override MixedA get objOfA => super.objOfA as MixedA; void someMethod() { objOfA.someNewMethod(); } }
推荐阅读
- c - 当我想更改变量的值时使用指针 *
- facebook - 如何在 OAuth 2.0 过程中自定义 Facebook 页面列表?
- python - 如何在 matplotlib 中使用日期时间标签标记毫秒轴
- v8 - 使用 GYP 构建 V8
- highcharts - 自动绘制累积数据
- excel - 语法错误 - 跨 2 个工作簿的 Excel VLookup
- python - Python / Folium / Choropleth:TypeError:不支持ufunc'isnan'
- python - 在 Databricks 上使用 Dask 和 fbprophet 会出错
- css - 标题生成器,全宽菜单颜色
- javascript - 材料 UI 数据网格复选框选择所有按钮在生产中不起作用