Java, создание и изменение объекта, переданного в качестве аргумента конструктору нового объекта - PullRequest
2 голосов
/ 30 января 2010

Я относительно новичок в Java, и я изучаю веб-инструментарий Google (GWT). Я видел этот фрагмент кода в их уроке. Я не понимаю, что происходит. Кажется, я создаю объект ClickHandler в конструкторе для нового объекта Button, а в объекте ClickHandler мы переопределяем метод onClick? Это то, что он делает? Можем ли мы добавить больше методов с этим стилем или просто изменить существующие?

    package com.google.gwt.sample.hello.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 * Hello World application.
 */
public class Hello implements EntryPoint {

  public void onModuleLoad() {
    Button b = new Button("Click me", new ClickHandler() {
      public void onClick(ClickEvent event) {
        Window.alert("Hello, AJAX");
      }
    });

    RootPanel.get().add(b);
  }
}

Спасибо

Ответы [ 2 ]

5 голосов
/ 30 января 2010

Это то, что известно как анонимный класс. ClickHandler - это интерфейс - для его реализации необходимо определить метод onClick. В этом примере кода анонимный подкласс ClickHandler создается как одноразовый и передается второму аргументу конструктора Button.

В ответ на вторую часть вашего вопроса вы можете добавить больше методов к анонимному классу, если хотите, но для этого не было бы особой причины, так как класс Button не будет знать, чтобы вызывать какие-либо не определенные методы на ClickHandler (и не сможет, потому что имеет ссылку только на класс как ClickHandler).

Вот ссылка на дополнительную информацию об анонимных классах: http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm

0 голосов
/ 30 января 2010

Следующий класс создается на лету (без имени):

class AnnonymousClickHandler implements ClickHandler 
{ 
    public void onClick(ClickEvent event) {
         Window.alert("Hello, AJAX");
    } 
}

Имя класса не AnnonymousClickHandler, я придумал имя, чтобы показать пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...