Вопрос Java, от программиста C ++ - PullRequest
2 голосов
/ 18 февраля 2011

Я изучаю Java, и теперь, когда я перестал работать над пакетами, все идет гладко.Я могу провести сходство между большинством вещей, которые я изучаю, с вещами, которые я уже знаю, по крайней мере, о концепции.Но что же происходит со следующим фрагментом кода?Это какая-то форма конструктора или анонимный объект?

Something obj = new Something()
{
  private static final int num = 3;

  public void meth()
  {
    // w/e
  }
};

Ответы [ 3 ]

6 голосов
/ 18 февраля 2011

Вы получили это - это создает анонимный внутренний класс Something.

См. Также: Вложенные классы (Учебное пособие по Java) и Анонимные классы .

2 голосов
/ 18 февраля 2011
/**
 * Notice there's only one thing in this that isn't defined:
 * It still needs public abstract void triggerEvent();
 */
public abstract static class TopButton extends JPanel implements MouseListener {
        protected ButtonPanel parent;
        private String text;
        public TopButton(ButtonPanel bp, String text) { parent = bp; this.text = text; addMouseListener(this); }
        public void mouseClicked(MouseEvent e) { triggerEvent(); }
        public void mouseEntered(MouseEvent e) { }
        public void mouseExited(MouseEvent e) { }
        public void mousePressed(MouseEvent e) { }
        public void mouseReleased(MouseEvent e) { }
        public abstract void triggerEvent();
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Color oldColor = g.getColor();
            Font oldFont = g.getFont();
                Font newFont = new Font(oldFont.getName(),oldFont.getStyle(),oldFont.getSize());
                g.setFont(newFont);
                g.setColor(Color.black);
                g.drawString(text, 20, 20);
            g.setFont(oldFont);
            g.setColor(oldColor);
        }
    }

Теперь, когда я на самом деле определяю свои кнопки, я делаю это.Предоставляя одну нужную строку, единственное, что отличает ее от других.Теперь я мог бы создать новый файл для каждого и определить новый класс для каждого.Это намного проще.

private static void loadButtonPanelButtons() {
    /* This button should tell the parent to bring up the save screen */
    TopButton save = new TopButton(buttonPanel,"Save") {
        public void triggerEvent() { parent.triggerSave(); }
    };
    save.setBorder(LineBorder.createBlackLineBorder());
    buttonPanel.add(save);

    /* This button should tell the parent to bring up the load screen */
    TopButton load = new TopButton(buttonPanel,"Load") {
        public void triggerEvent() { parent.triggerLoad(); }
    };
    load.setBorder(LineBorder.createBlackLineBorder());
    buttonPanel.add(load);

    TopButton addTile = new TopButton(buttonPanel,"Add Tile") {
        public void triggerEvent() { parent.triggerAddTile(); }
    };
    addTile.setBorder(LineBorder.createBlackLineBorder());
    buttonPanel.add(addTile);

    TopButton saveTiles = new TopButton(buttonPanel,"Save Tiles") {
        public void triggerEvent() { parent.triggerStyleSave(); }
    };
    saveTiles.setBorder(LineBorder.createBlackLineBorder());
    buttonPanel.add(saveTiles);
}

Теперь, когда я обработаю нажатие кнопок, вспомним в определении TopButton ... было

    public void mouseClicked(MouseEvent e) { triggerEvent(); }

Мы знаем triggerEvent()в конце концов определяетсяМы можем определить его для каждой кнопки, и когда на панель нажимают, независимо от того, что мы определили как triggerEvent(), она вызывается.

1 голос
/ 18 февраля 2011

Такая конструкция создает анонимный внутренний класс класса, в котором эта конструкция выполняется и является производной от Something (не внутреннего класса Something).

Идея состоит в том, чтобы быстро предоставить реализации для абстрактных классов, интерфейсов или переопределить некоторые функциональные возможности класса.

(new Thread () {public void run () {System.out.println ("выполнено в другом потоке");}}). Start ();

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