Ответ 1
Неважно... нашел ответ здесь :)
http://www.javaworld.com/javaworld/javatips/jw-javatip10.html
Вставка из статьи, чтобы сохранить ее:
Разработчики, знакомые с управляемой событиями моделью программирования MS-Windows и X Window System, привыкли передавать функциональные указатели, которые вызываются (то есть "перезваниваются"), когда что-то происходит. Объектно-ориентированная модель Java в настоящее время не поддерживает указатели на методы, и, следовательно, кажется, исключает использование этого удобного механизма. Но еще не все потеряно!
Поддержка интерфейсов в Java предоставляет механизм, с помощью которого мы можем получить эквивалент обратных вызовов. Хитрость заключается в том, чтобы определить простой интерфейс, который объявляет метод, который мы хотим вызвать.
Например, предположим, что мы хотим получать уведомления, когда происходит событие. Мы можем определить интерфейс:
public interface InterestingEvent
{
// This is just a regular method so it can return something or
// take arguments if you like.
public void interestingEvent ();
}
Это дает нам контроль над любыми объектами классов, которые реализуют интерфейс. Таким образом, нам не нужно заниматься какой-либо другой посторонней информацией типа. Это гораздо приятнее, чем хакерские функции батута C, которые используют поле данных виджетов для хранения указателя объекта при использовании кода C++ с Motif.
Класс, который будет сигнализировать о событии, должен ожидать объекты, которые реализуют интерфейс InterestingEvent, а затем вызывать метод InterestEvent () соответствующим образом.
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 method.
ie.interestingEvent ();
}
//...
}
// ...
}
В этом примере я использовал somethingHappened предикат для отслеживания, должно ли быть сгенерировано событие. Во многих случаях сам факт того, что метод был вызван, достаточен для того, чтобы сигнализировать о представляющем интересе.
Код, который хочет получить уведомление о событии, должен реализовывать интерфейс InterestingEvent и просто передавать ссылку на себя в уведомитель о событии.
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...
}
//...
}
Это все, что нужно сделать. Я надеюсь, что использование этой простой идиомы Java сделает ваш переход на Java немного менее нервным.