拓冰建站拓冰建站
首页 / 资讯中心 / 正文

为变革做好准备:安全切换至密封式 API

摘要对某种类型进行的彻底分析,仅涵盖了编译器已知的所有允许的子类型;但这并不包括未来的扩展情况,因为这些扩展可能会在运行时引发问题。API 的编写者应该明确说明sealed类型的预期发展情况,这样客户端代码就可以自行决定如何处理未来的扩展。在切换使用sealed类型时,几乎永远不需要使用default,而且这通常也不是最佳选择。Switch表达式:出于设计目的而存在的全面性表达switch表达式必须具有穷尽性,也就是说,switch必须能够为选择器的每一个可能非空值产生相应的结果。对于除了boolean之外的原始类型,default是唯一一个涵盖了所有未列出值的标签,并且使得switch成为穷举的标签:int code = ...; String fruitName = switch (code) { case 0 - "apple"; case 1 - "orange"; default - "unknown"; };相比之下,当选择器为sealed类型时,可以通过列出sealed类型的所有允许子类型来使switch变得详尽,而case则可以通过case来指定。此时不需要使用default。例如:sealed interface Fruit permits Apple, Orange {} record Apple(String variety) implements Fruit { ... } record Orange(String variety) implements Fruit { ... } Fruit f = ...; String description = switch (f) { case Apple a - "apple: " + a.variety(); case Orange o - "orange: " + o.variety(); };然而,那些被定义为“穷举”的类型,并不一定能保持这种状态。因为随着时间的推移,某些类型可能会发展出新的允许的子类型。这意味着,那些在编写时被认为是“穷举”的sealed类型,可能不再具有穷举的特性,因为它们已经无法涵盖所有可能的值了。该语言提供了多种静态和动态的工具,以帮助开发者轻松应对这些变化。例如,假设Fruit被重新编译以添加Pear这个子类型:
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门