2013-11-13 2 views
1

Ну, насколько я знаю, объект события, переданный как аргумент функции обработчика событий в Java, содержит дополнительную информацию о событии. Итак, это означает, что иногда не так важно передавать этот аргумент, пока мы его не потребуем.Важно ли всегда передавать аргумент обработчику событий в java?

Но тогда это не тот случай ... поскольку он выдает ошибку, если отсутствует параметр объекта. Например, это будет сгенерировано сообщение об ошибке ..

public void actionPerformed() {  //since the event object parameter is missing 

     button.setText("Clicked"); 
    } 

почему это так? Это просто пустая трата времени для передачи параметра, поэтому почему в Java-интерфейсе Swing/AWT нет метода, который позволяет обработчикам событий, не имеющим никаких параметров? Это было бы очень комфортно. НЕТ?

+1

Это не «забросило ошибку». Скорее это ошибка компиляции, потому что конкретный интерфейс не был реализован - убедитесь, что * read * и * post * отображаются фактические индикаторы ошибок (вот почему я ниспровергаю). Если вы делаете свои * собственные * события/обработчики событий, то вы можете указать любые параметры (возможно, нет); но если вы используете * существующие * события, то вы должны играть по их определенным правилам. – user2864740

+0

@ user2864740 можно ли создать собственный обработчик событий? –

+0

Конечно, если вы создаете свой собственный источник (возможно, элемент управления?). См. Http://stackoverflow.com/questions/6270132/create-a-custom-event-in-java – user2864740

ответ

5

Да, это важно, параметр является частью контракта, как указано интерфейсом.

interface описывает, что ожидается от реализаций.

public interface ActionListener { 
    public void actionPerformed(ActionEvent evt); 
} 

Для того класса, чтобы иметь возможность вызвать любую реализацию ActionListener, она должна обеспечить не только имя метода, но какие-либо параметры, что она (interface) списков.

public void actionPerformed() { 
    button.setText("Clicked"); 
} 

Не соответствует требованиям контракта на ActionListener и, следовательно, не может быть названо. В самом деле, если вы считаете, что вы класс implements ActionListener, это не будет компилироваться, если вы не предоставите реализацию подписи метода формы (public void actionPerformed(ActionEvent evt)).

Если вы не хотите использовать объект evt, то игнорируйте его.

+0

Почему нет контракта, который указывает обработчики событий без параметра? –

+3

Вы должны спросить дизайнеров API. Я бы предположил, что никогда не видел ситуации, когда вам не нужен объект события. – MadProgrammer

Смежные вопросы