Java's support of interfaces provides a mechanism by which we can get the equivalent of callbacks. The trick is to define a simple interface that declares the method we wish to be invoked.
For example, suppose we want to be notified when an event happens. We can define an interface:
public interface InterestingEvent
{
// This is just a regular method so it can return something or
// take arguments if you like.
public void interestingEvent ();
}
This gives us a grip on any objects of classes that implement the interface. So, we need not concern ourselves with any other extraneous type information. This is much nicer than hacking trampoline C functions that use the data field of widgets to hold an object pointer when using C++ code with Motif.
The class that will signal the event needs to expect objects that implement the InterestingEvent interface and then invoke the interestingEvent() method as appropriate.
public class EventNotifier
{
private InterestingEvent ie;
private boolean somethingHappened;
public EventNotifier (InterestingEvent event)
{
// Save the event object for later use.
ie = event;
// Nothing to report yet.
somethingHappened = false;
}
//...
public void doWork ()
{
// Check the predicate, which is set elsewhere.
if (somethingHappened)
{
// Signal the even by invoking the interface's method.
ie.interestingEvent ();
}
//...
}
// ...
}
In that example, I used the somethingHappened predicate to track whether or not the event should be triggered. In many instances, the very fact that the method was called is enough to warrant signaling the interestingEvent().
The code that wishes to receive the event notification must implement the InterestingEvent interface and just pass a reference to itself to the event notifier.
public class CallMe implements InterestingEvent
{
private EventNotifier en;
public CallMe ()
{
// Create the event notifier and pass ourself to it.
en = new EventNotifier (this);
}
// Define the actual handler for the event.
public void interestingEvent ()
{
// Wow! Something really interesting must have occurred!
// Do something...
}
//...
}
That's all there is to it. I hope use this simple Java idiom will make your transition to Java a bit less jittery.
Thank YouBy Anonymous on January 17, 2010, 6:11 pmIt helped solve a problem. I am a newbie..and this cleared the air. Thank you.
Reply | Read entire comment
Thank you it is very good.By Anonymous on September 29, 2009, 8:22 amThis article is very simple and straight forward about call back methods implementation.I tried it.It's working fine.
Reply | Read entire comment
Great article By Anonymous on September 8, 2009, 12:09 amThis was the simple explanation i was looking for . Thank you !
Reply | Read entire comment
Nice conceptBy ConkerTineta on August 20, 2009, 6:47 pmNice concept to follow. for those who term it "worst explanation" why dont you do your self and the world a favour appreciate attempts made by others to benefit...
Reply | Read entire comment
To who ever posted "WorstBy Anonymous on August 13, 2009, 7:03 pmTo who ever posted "Worst Explanation", you clearly have no understanding of how java works. If you go back to the basics of Java programming you'll find the above...
Reply | Read entire comment
View all comments