Я в новинку для Java так терплю меня, если это - смехотворно простой вопрос, но мне любопытно на предмет этого вызова метода, который имеет {кодируют} быть принятым - см. код ниже для примера в методе addSelectionListener. Какова цель этого? Я просматривал документы для explaination, но наклон, кажется, находит то, чем называют эту практику, не берут в голову любую полезную информацию.
setStatusLine.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String message = "I would like to say hello to you.";
if (pressed) {
message = "Thank you for using me";
}
setStatusLine(message);
pressed = !pressed;
}
});
Спасибо за любую справку или понимание, которое может быть предложено
это анонимный класс или анонимный внутренний класс. Если вы поищете это в Google, вы найдете несколько руководств / примеров. Sun также имеет некоторые документы .
На самом деле нет вызова метода ... Этот код устанавливает прослушиватель выбора для компонента setStatusLine.
Эквивалент этого кода может быть
public class X implements SelectionListener{
//In the constructor or an other method.
setStatusLine.addSelectionListener(this);
public void widgetSelected(SelectionEvent e) {
String message = "I would like to say hello to you.";
if (pressed) {
message = "Thank you for using me";
}
setStatusLine(message);
pressed = !pressed;
}
}
Метод addSelectionListener получает экземпляр SelectionListener. Он не получает «код». Непонятным является использование new
Использование анонимных внутренних классов является обычным для слушателей, где мы создаем новый класс, который будет использоваться в одном конкретном месте. Поэтому мы не даем ему названия и предпочитаем реализовывать его непосредственно в контексте, в котором он используется.
Мне потребовалось некоторое время, чтобы понять анонимные внутренние классы. Основные вещи, которые следует запомнить:
Они похожи на параметры, за исключением того, что вместо передачи примитива или объекта вы передаете класс, который реализует интерфейс / расширяет класс (да, они также работают с интерфейсами) в зависимости от параметра метода . Они анонимны, поэтому "исчезают" сразу после того, как метод выскочил из стека. }); - бесполезный подарок для анонимного внутреннего класса. Они часто всплывают в пользовательских интерфейсах для событий слушателя Они сохраняют беспорядок в вашем коде, но также затрудняют его чтение.
Для полного наказания прочтите JLS: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.9.5
Если вам интересно знать Если говорить о таких вещах, читать книгу SCJP и сдавать экзамен - это хорошо, или вы можете изучить JLS.Он не научит вас программировать, но поможет понять, как работают Java и, в некотором роде, многие другие объектно-ориентированные языки.
Как уже сказали другие участники: Это анонимный класс
Вы могли бы создать новый класс с именем MyClass в новом файле с именем McClass.java выглядит так:
class MyClass extends SelectionAdapter {
public void widgetSelected(SelectionEvent e) {
<your code that's being executed whenever the widget is being selected>
}
}
Тогда вы могли бы изменить первую строку вот так:
setStatusLine.addSelectionListener (new MyClass ());
Видите? Теперь у вас есть «явный» класс всего с одной функцией. Часто это слишком накладные расходы и загромождают ваш дизайн.
Это поможет?