我在代码中遇到了这样的构造
Integer a = switch (result) {
case Success(var value) -> value;
case Failure(Throwable e) -> Assertions.fail();
};
我不明白为什么你要把它推到构造函数中var value
case Success(var value)
我试着用谷歌搜索一下switch,但没有看到任何类似的东西。
请告诉我这个设计叫什么,或者发表一篇关于它的文章。
在本例中,
case Success(var value)它不是构造函数,而是 Java 21 中添加的一个相对较新的功能(请参阅JEP 441:switch 的模式匹配、JEP 440:记录模式) -元组switch表达式中的switchrecord模式匹配 ( )。特别是,在这种情况下,模板用于检查通用元组(通用记录),为此使用类型推断
var。官方文档:表达式和语句的模式匹配
switch::记录模式中类型参数的推断MyPair(var s, var i)这里编译器将提取as的类型MyPair<String, Integer>(String s, Integer i)此外,匹配元组模式时的类型提取可以与以下命令一起使用
instanceof:这里编译器将“理解”
x,y将具有类型double。类似地,对于泛型元组,
Box(var s)编译器将确定类型为Box<String>(String s)因此,根据上述内容,您的代码在某处定义了
record Success<T>(T value) {}, ,形式的元组record Failure(Throwable e) {},并且该变量预计result是两种指定类型之一,Success<Integer>(Integer value)如果成功则专门键入。