问题标签 [sealed-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
341 浏览

kotlin - 如何覆盖密封类字段?

我在我的服务中创建了一个自定义结果字段(而不是 Kotlin 的结果),因此我可以在成功和失败案例中返回一个消息字段:

然后在另一个类中,我调用了一个产生此结果的方法并希望记录 Result.message

只是,kotlin 编译器无法识别“消息”,因为它不是 Result 的直接属性,而是 Success 和 Failure 的属性。

我试图覆盖消息字段并在 Result 类中定义它。但我得到一个错误。

那么,如何在不将结果实例强制转换为它的派生实现类(成功或失败)的情况下访问 Result.message 呢?

0 投票
1 回答
77 浏览

android - 由于对象引用,MockK verifySequence 无法正常工作

我经常使用一个状态类(一个密封类)来控制我的屏幕状态(比如成功、错误和加载)。所以我会有类似的东西:

现在,在某个类上,我有一个具有此值的属性,在某个流程中,我将其设置为 Loading,然后设置为 Error。这我可以检查这是否是这个属性被设置的顺序,verifySequence如下所示:

现在假设我的密封类内部有类而不是对象,并且有点复杂,如下所示:

当我尝试检查顺序时,我的测试失败了,因为我正在使用类并且 MockK 通过引用做出断言:

知道如何检查这个序列吗?

0 投票
0 回答
253 浏览

flutter - 如何在当前 Dart 中编码代数数据类型?

如何对 Dart 中当前的代数数据类型进行编码?

代数数据类型也称为:

问题是,我如何在当前的 Dart / Flutter 中实现它,因为对它的支持还没有得到支持(参见 issue #349)?

网上解释了一些方法,例如我找到了match图书馆,sealed_unions图书馆,if-else方法,以及一些更棘手的技术。

但我真的很喜欢关于选择什么以及你为什么选择它的更多专家意见。想法?

0 投票
1 回答
325 浏览

android - Android Studio 无法识别密封类的 when 语句是详尽无遗的

我有一个名为的简单结果类Outcome,它是密封的,由三个子类组成WaitingSuccessFailure

现在我想使用一个when语句来检查泛型Outcome是哪种类型,但是 Android Studio(特别是 Android Studio,IntelliJ IDEA 没有这个问题)似乎认为它并不详尽并给出警告:

建议密封类上的 'when' 表达式是详尽的,添加 'is Failure'、'is Success'、'Waiting' 分支或 'else' 分支

但是when绝对详尽的:

即使我要求添加剩余的分支,它也只是添加了我已经拥有的内容的副本,并且仍然产生相同的错误:

这不是一个大问题,因为它只是一个警告,不会导致任何实际问题。但是我想知道这是否是一个推理错误,或者它是否与我的设计有关。


注意:我的 Android Studio 插件版本是 1.4.32-release-Studio4.1-1,我已经用一个全新的项目进行了尝试,并得到了相同的结果。

0 投票
1 回答
273 浏览

android - 检查 Kotlin 中密封类的所有子类

我有一个包含球作为对象的密封类,用于台球游戏。在代码的其他地方,我使用了 BallType,它是一个枚举类。我希望能够在需要时通过提供球类型来获取球对象。有没有办法做到这一点?

0 投票
3 回答
99 浏览

kotlin - 是否可以组成两个密封类?

我有两个不同的 Kotlin 密封类的图像。

是否可以定义包含水果和蔬菜的类型?就像是Produce = Fruit | Vegetable

这样你就可以写出类似的东西

0 投票
1 回答
342 浏览

android - 如何使用协程在 ViewModel 中正确实现 Result.Success 和 Result.failure?

我有视图模型,我通过以下方式得到响应

但我想添加 Result.Success 逻辑如果我会成功,如果它是错误 Result.Error 使用密封类

在我的存储库类下面

在我的 getResponse 下面

在我的响应类下面

以下结果密封类

0 投票
2 回答
443 浏览

android - 类型不匹配。必需:结果>!发现:成功

如果我得到正确的响应,我已经实现了密封类如果错误 Result.Error,我将得到 Result.Success

在我实现该逻辑的 ViewModel 下方

在我的密封类结果之下

但是当我运行项目时出现以下错误

类型不匹配。必需:结果<列表>!发现:成功

0 投票
2 回答
803 浏览

java - 如何以及何时在 Java 中使用 Kotlin 密封类?

考虑到误用密封类,我们来看看下面的设计。

有两个模块:

  • parser(Kotlin) - 负责从 String 创建实例
  • processor(Java) - 将原始传入数据泵入强类型存储(即关系表)
  1. 字符串来自外部源processor
  2. processor将其认可委托给parser
  3. parser[Banana, Nail, Shoe]根据一些创建不同类型的实例rules X
  4. processor根据某些情况将每个实例持久保存到适当的表中rules Y

在基于每个实例的具体类型做出决策时parser,是否适合在这里使用密封类?processor

我发现这种方法有问题,因为越来越多的 Item 子类可能会导致设计灾难,但无法弄清楚是否存在与此完全不同的密封类的“规范”用例。

什么是密封类适用性的限制,当系统设计者应该更喜欢“较少类型”的东西时,如下所示:

0 投票
1 回答
502 浏览

java - 不同包中的类的密封类

如果我声明遵循密封的层次结构

不使用模块(没有module-info.java)并尝试用Maven编译它我得到

我知道https://openjdk.java.net/jeps/409和本节:

permit 指定的类必须位于超类附近:在同一个模块中(如果超类在命名模块中)或在同一个包中(如果超类在未命名模块中)。

但是,默认情况下 Maven 不应该在编译时使用类路径吗?可以完全避免这种限制吗?

如果不是,这是否开创了一个先例,模块路径上的功能比类路径上的功能更灵活,反过来 - 虽然仍然支持类路径,但与模块路径相比,它不像以前那样是一等公民?