gpt4 book ai didi

Dart 初始化列表和最近填充的实例变量的访问

转载 作者:行者123 更新时间:2023-12-03 02:45:18 28 4
gpt4 key购买 nike

我正在尝试初始化类中的一些事件流。我希望该流是最终流,但由 StreamController 控制。我尝试了以下代码:

import "dart:async";

class Dog {
final StreamController _onBarkController;
final Stream onBark;

Dog() :
_onBarkController = new StreamController(),
onBark = _onBarkController.stream;

}

但这段代码是非法的,因为在初始化列表中禁止访问(甚至隐式访问)this

有什么办法可以实现吗?

最佳答案

没有很好的方法来解决需要将某些对象解构为多个 final 字段的一般问题,这基本上就是您在这里尝试的问题。但好消息是通常你并不真的需要这样做。我推荐的两种方法是工厂构造函数和不保持派生状态。

工厂构造函数很棒,因为您可以在调用真正的构造函数之前执行任意计算来创建参数,而真正的构造函数通常只有一个初始化列表。在这种情况下,您可以让工厂构造函数创建 StreamController 并将它和流传递给私有(private)构造函数。

但对您来说更好的是,不要将 Stream 存储在字段中,因为您可以通过 Controller 访问它。我一直在使用流时这样做:

class Dog {
final StreamController _onBarkController = new StreamController();
Stream get onBark => _onBarkController.stream;
}

onBark 实际上是从 _onBarkController 派生的值,因此无需存储它。

关于Dart 初始化列表和最近填充的实例变量的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165479/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com