2015-06-29 2 views
4

Я новичок в Java, исходя из фона javascript.Bind event/callback to keyword в Java

В JavaScript, мы можем сохранить обратные вызовы в объектах, как this-

//we register some callback on a keyword 
    var observerCallbacks = {}; 
    registerObserverCallback = function(eventname ,callback){ 
       observerCallbacks[eventname] = callback; 
      }; 
//For calling events 
    notifyObservers = function(eventname){   
     observerCallbacks[eventname]();        
      }; 

Использование:

//Register event 
     registerObserverCallback('eventA',function(){ 
      //body of callback 
    }); 

//For calling event 
notifyObservers('eventA'); 

Я ищу аналогичную функциональность в Java. Есть ли способ создания этого типа пользовательских функций.

ответ

3

Для этой цели Java имеет несколько иной механизм. Объект регистрируется как слушатель определенного типа события. При возникновении такого рода событий все слушатели уведомляются.

Here вы можете найти учебник об этом. Ниже код оттуда.

public class MultiListener ... implements ActionListener { 
    ... 
    //where initialization occurs: 
     button1.addActionListener(this); 
     button2.addActionListener(this); 

     button2.addActionListener(new Eavesdropper(bottomTextArea)); 
    } 

    public void actionPerformed(ActionEvent e) { 
     topTextArea.append(e.getActionCommand() + newline); 
    } 
} 

class Eavesdropper implements ActionListener { 
    ... 
    public void actionPerformed(ActionEvent e) { 
     myTextArea.append(e.getActionCommand() + newline); 
    } 
} 

Больше на эту тему можно найти here

1

JavaScript асинхронный язык, Java является синхронным язык. То, что вы хотите сделать, это то же самое, что спросить «Как превратить молоток в отвертку?» Хотя с креативностью все еще возможно, чтобы заставить молоток закрутить что-то, это не значит, что инструмент предназначен для использования, и результат может отличаться.

Обратные вызовы необходимы в JavaScript, чтобы ваша программа знала, что функция завершена, Java знает, что функция завершена, так как она перестает ее выполнять.

Java предлагает слушателям событий события, которые могут показаться похожими, когда вы не знаете лучше; они простаивают до тех пор, пока они не прислушиваются, чтобы активировать их, затем он активируется, исполняется и возвращается к прослушиванию.

Java-способ сделать это - рассказать слушателю о том, что вы хотите, чтобы он сделал это прямо сейчас; вы не перестаете ждать обратного вызова, потому что Java остановится, выполнит то, что вы скажете, а затем вернитесь туда, откуда оно было. Как написать код для слушателя можно найти in the oracle tutorial, но ваша проблема скорее скорее логическая, чем конкретный код.

Если вы хотите, чтобы слушатель хранил что-то для другого метода, bean с геттерами и сеттерами был бы одним из способов Java.