File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Beginning Java and the fly likes Is this a closure? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Is this a closure?" Watch "Is this a closure?" New topic

Is this a closure?

Jack Allan

Joined: Apr 10, 2012
Posts: 1
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?

Jeff Verdegan

Joined: Jan 03, 2004
Posts: 6109

Hi, Jack, and welcome to the Ranch!

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.)
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 15092

Java 7 indeed does not have closures / lambda expressions. That's a new feature that will most likely be included in Java 8.

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
Stephan van Hulst

Joined: Sep 20, 2010
Posts: 4627

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.
I agree. Here's the link:
subject: Is this a closure?
It's not a secret anymore!