This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
I would like to find out more about what is going on in the below code. I know that the new ExpectedCondition bit is some kind of callback but what exactly is this language feature called? Is it a closure/lamda expression? Where can I learn more about this kind of thing?
No, that's not a closure. There was talk of adding closures to Java 7, but I don't think they made it in. Don't quote me on that last bit though.
What you're seeing is Java's closest approximation to a closure. It's an anonymous inner class.(⇐That's a google link, but skip anything that takes you to roseindia. That site is known for being rife with errors.)
You *could* call it a kind of closure. Most people who are familiar with the term will know what part of the code you're referring to. You could also call this new ExpectedCondition a callback.
However, they are not. The new ExpectedCondition is called an Anonymous Class. The operation on xpathQuery is also not a closure or a lambda expression, even if does the same thing.
You get closures when you bind a function object to a variable mentioned in the lexical context outside the function. You get lambda expressions when you create an anonymous function type. You get a callback when you pass a function to another function.
Java doesn't have function objects so you can't have closures, lambda expressions, or callbacks. Anonymous classes provide a way of doing things that look a lot like these concepts though.
The mind is a strange and wonderful thing. I'm not sure that it will ever be able to figure itself out, everything else, maybe. From the atom to the universe, everything, except itself.