“StreamTransformercast()”是做什么的?

“StreamTransformercast()”是做什么的?,stream,dart,Stream,Dart,我已经实现了流转换器。请注意,这只是学习飞镖的一个练习。此转换器将整数转换为字符串。我给出了下面的代码,你也可以在上面找到它 CasterTransformer类扩展了抽象类StreamTransformer 因此,它实现了StreamTransformer cast方法 关于文件,据说: 生成的转换器将在运行时检查它转换的流的所有数据事件实际上都是S的实例,并且它将检查此转换器生成的所有数据事件实际上都是RT的实例 见: 首先,我认为这篇文档中有一个输入错误:它应该说……它实际上是RS而不是S

我已经实现了流转换器。请注意,这只是学习飞镖的一个练习。此转换器将整数转换为字符串。我给出了下面的代码,你也可以在上面找到它

CasterTransformer类扩展了抽象类StreamTransformer

因此,它实现了StreamTransformer cast方法

关于文件,据说:

生成的转换器将在运行时检查它转换的流的所有数据事件实际上都是S的实例,并且它将检查此转换器生成的所有数据事件实际上都是RT的实例

见:

首先,我认为这篇文档中有一个输入错误:它应该说……它实际上是RS而不是S的实例

然而,这对我来说似乎很模糊

为什么我们需要一个流转换器来检查值类型?变压器的作用是变换,不是吗?如果一个组件的目的是检查,那么我们为什么不称它为检查器呢? 还有,为什么我们需要检查我们实现的转换器是否产生了所需的数据?如果没有,那么我们将面临一个应该修复的bug。 有人能解释一下Cast方法的用途吗?

Cast方法是用来帮助键入操作的

如果您有一个StreamTransformer,它会将数字转换为整数,比如说,通过调用.toInt,然后添加42,因为这显然很有用!。 如果您想在需要StreamTransformer的地方使用该转换器,那么您不能。由于num不是int的子类型,因此转换器不可分配给该类型

但是您知道,因为您了解流转换器实际上是如何工作的,所以第一个类型参数仅用于输入。接受任何num的东西应该可以安全地在只给定int的地方使用。 因此,为了让类型系统相信您知道自己在做什么,您可以编写:

StreamTransformer<int, num> transform = myTranformer.cast<int, num>();
这将在您自己的转换器上使用系统的默认强制转换包装器。

强制转换方法用于帮助键入操作

如果您有一个StreamTransformer,它会将数字转换为整数,比如说,通过调用.toInt,然后添加42,因为这显然很有用!。 如果您想在需要StreamTransformer的地方使用该转换器,那么您不能。由于num不是int的子类型,因此转换器不可分配给该类型

但是您知道,因为您了解流转换器实际上是如何工作的,所以第一个类型参数仅用于输入。接受任何num的东西应该可以安全地在只给定int的地方使用。 因此,为了让类型系统相信您知道自己在做什么,您可以编写:

StreamTransformer<int, num> transform = myTranformer.cast<int, num>();

这将在您自己的转换器上使用系统的默认强制转换包装器。

感谢您的回复。我知道该方法只是实例化了一个新的转换器,它与所需的输入/输出数据类型兼容。我更新来说明这一点。啊,是的。添加了关于如何创建新的包装变压器的说明。感谢您的说明。的确,这很方便。谢谢你的回复。我知道该方法只是实例化了一个新的转换器,它与所需的输入/输出数据类型兼容。我更新来说明这一点。啊,是的。添加了关于如何创建新的包装变压器的说明。感谢您的说明。事实上,这很方便。
StreamTransformer<RS, RT> cast<RS, RT>() => StreamTransformer.castFrom(this);