借助新的 Java 21 功能,我们拥有更好的模式匹配。有了这些功能,我们就有了受保护的模式案例标签,可以为案例标签定义一个模式保护,如下所示:
switch (someObject) {
case String s when someVar == 5 -> {}
case Integer i when someVar == 10 -> {}
//...//
}
为什么在上面的例子中,
someVar
必须是最终的或实际上是最终的?是否这样我们就不能在单独的情况下重新分配该值,这会使我们的情况通过/失败与我们没有重新分配它时不同?我无法通过 JEP 找到相关信息,但如果有人能指出我的话那就太好了!
因为开关的含义(即代码)应该是不变的。它不应该对局部变量值的变化敏感。当然,您可以自由地使用对行为因调用而变化的方法的调用来破坏它——谢谢,普遍的可变性——但您不应该这样做。这样做会使开关更难理解(也更难优化。)