我想知道哪个是扩展CustomEvent类的最佳方法,这个类只有一个工厂构造函数.我尝试执行以下操作并遇到超级构造函数的问题:
class MyExtendedEvent extends CustomEvent {
int count;
factory MyExtendedEvent(num count) {
return new MyExtendedEvent._internal(1);
}
MyExtendedEvent._internal(num count) {
this.count = count;
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用.我总是碰到:
未解析的对超级构造函数'CustomEvent()'的隐式调用
如果我尝试将内部构造函数转换为:
MyExtendedEvent._internal(num count) : super('MyCustomEvent') {
this.count = count;
}
Run Code Online (Sandbox Code Playgroud)
我最终得到:
'解析了对超级构造函数'CustomEvent()''的隐式调用.
我不确定我做错了什么 - 但我想问题是CustomEvent只有一个构造函数是工厂构造函数(正如doc所说 - http://api.dartlang.org/docs/releases/latest/ dart_html/CustomEvent.html)
扩展CustomEvent此表单的任何类的最佳方法是什么?
Ale*_*uin 11
您不能使用工厂构造函数直接扩展类.但是,您可以实现该类并使用委托来模拟扩展.
例如 :
class MyExtendedEvent implements CustomEvent {
int count;
final CustomEvent _delegate;
MyExtendedEvent(this.count, String type) :
_delegate = new CustomEvent(type);
noSuchMethod(Invocation invocation) =>
reflect(_delegate).delegate(invocation);
}
Run Code Online (Sandbox Code Playgroud)
注意:我在这里使用了反射来简化代码片段.一个更好的实现(关于性能)将是定义所有方法,如method1 => _delegate.method1()
不幸的是,如果一个类只有工厂构造函数,你就不能扩展它,你只能实现它。但这对于 CustomEvent 来说效果不佳,因为它是 DOM 类型,这也是它只有工厂构造函数的原因:浏览器必须生成这些实例,Dart 对象只是一个包装器。如果您尝试实现 CustomElement 并触发一个,您可能会收到错误。
| 归档时间: |
|
| 查看次数: |
2850 次 |
| 最近记录: |