1
有了变化StreamEventTransformer
,我要创建行为类似StreamEventTransformer
包装类,所以这里的代码:执行的覆盖方法,触发未覆盖一个
class Transformer implements EventSink, StreamTransformer {
EventSink rootSink;
Transformer();
Transformer._useSink(this.rootSink);
void handleData(event, EventSink sink) {
print('inside handleData');
sink.add(event);
}
void handleError(error, StackTrace stackTrace, EventSink sink) =>
sink.addError(error, stackTrace);
void add(event) {
print('inside add');
handleData(event, rootSink);
}
void addError(error, [StackTrace stackTrace]) =>
handleError(error, stackTrace, rootSink);
void close() => rootSink.close();
Stream bind(Stream source) =>
new Stream.eventTransformed(source, (EventSink sink) {
EventSink eventSink = new Transformer._useSink(sink);
return eventSink;
});
}
这一类,我只是必须从Transformer
延伸以适应变化。
但是,当我将其扩展:
class PlusOneTransformer extends Transformer {
void handleData(data, sink) {
sink.add(data + 1);
}
}
并对其进行测试:
void main() {
StreamController controller = new StreamController();
Stream stream = controller.stream.transform(new PlusOneTransformer());
stream.listen(print);
controller.add(10);
}
我期待的输出为:
inside add
11
而是:
inside add
inside handleData
10
所以它没有运行重写的handleData
,它运行的是旧的。从调试器中,我可以看到执行的类是Transformer
而不是PlusOneTransformer
,而我正在使用PlusOneTransformer
来转换流。
我错过了什么吗?
发布您的代码为StreamController – Nathanial
不确定如果你的意思是我如何实例化它,它在主函数 –
虽然流控制器不是一个抽象类吗? – Nathanial