Vavr User Guide在讨论其named parameters
功能时会引用以下代码:
命名参数
Vavr利用lambdas为匹配的值提供命名参数。
Number plusOne = Match(obj).of(
Case($(instanceOf(Integer.class)), i -> i + 1),
Case($(instanceOf(Double.class)), d -> d + 1),
Case($(), o -> { throw new NumberFormatException(); }) );
有人可以详细说明这里命名的参数在哪里以及如何使用它们?提前谢谢。
答案 0 :(得分:0)
我认为他们的意思是,如果没有Vavr,你必须将匹配的对象强制转换为匹配的类型(例如,在第2行,你需要转换为Integer)。 使用Vavr,在lambda中,参数已经是正确类型的匹配对象,您不需要将其强制转换。
int withoutVavr(Object obj) {
if (obj instanceof Integer) {
return ((Integer) obj) + 42;
} else if (obj instanceof String) {
return ((String) obj).concat("obj is just an Object until I cast it").length();
}
throw new NumberFormatException();
}
int withVavr(Object obj) {
return Match(obj).of(
Case($(instanceOf(Integer.class)), i -> i + 42),
Case($(instanceOf(String.class)),
blabla -> blabla.concat("blabla is a string, I did not need to cast it; also, I could rename it to blabla thanks to lambdas, without writing the tedious 'String blabla = (String) obj'").length()),
Case($(), o -> {
throw new NumberFormatException();
}));
}
希望这能澄清/帮助。