为什么受保护模式案例标签中使用的变量必须是最终/有效最终的? (Java 21)

问题描述 投票:0回答:1

借助新的 Java 21 功能,我们拥有更好的模式匹配。有了这些功能,我们就有了受保护的模式案例标签,可以为案例标签定义一个模式保护,如下所示:

switch (someObject) {
    case String s when someVar == 5 -> {}
    case Integer i when someVar == 10 -> {}
    //...//
}

为什么在上面的例子中,

someVar
必须是最终的或实际上是最终的?是否这样我们就不能在单独的情况下重新分配该值,这会使我们的情况通过/失败与我们没有重新分配它时不同?我无法通过 JEP 找到相关信息,但如果有人能指出我的话那就太好了!

java switch-statement language-lawyer java-21 switch-expression
1个回答
0
投票

因为开关的含义(即代码)应该是不变的。它不应该对局部变量值的变化敏感。当然,您可以自由地使用对行为因调用而变化的方法的调用来破坏它——谢谢,普遍的可变性——但您不应该这样做。这样做会使开关更难理解(也更难优化。)

© www.soinside.com 2019 - 2024. All rights reserved.