我认为他们的意思是,如果没有 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();
}));
}
希望这可以澄清/帮助。