As with try-as-expression, there are many other language features we can simulate with Lambdas.
Another example is removing the cast commonly needed with instanceof. Kotlin has a nice feature called smart casts, which allows you to do
if (x instanceof Duck) {
x.quack();
}
Where x is “casted” to Duck within the block.
I previously blogged how to simulate this in older Java using dynamic proxies.
Now in Java 8 you can do it in a slightly less terrible way, and also make it an expression at the same time.
@Test
public void should_return_value_when_input_object_is_instance() {
Object foo = "ffoo";
String result = when(foo).instanceOf(String.class)
.then(s -> s.substring(1))
.otherwise("incorrect");
assertEquals("foo", result);
}
More examples and implementation on github.