Блок инициализации Java - PullRequest
       24

Блок инициализации Java

3 голосов
/ 02 сентября 2011

Может кто-нибудь помочь мне понять следующую конструкцию?У меня проблемы с пониманием, если это инициализатор или анонимный класс.Я не знаком с этим синтаксисом.

   JTable jt = new JTable(data, fields) **{
            public TableCellRenderer getCellRenderer(int row, int column) {
                // TODO Auto-generated method stub
                return renderer;
            }
        };**

Ответы [ 2 ]

6 голосов
/ 03 сентября 2011

Создает анонимный внутренний класс, расширяющий JTable, и переопределяет метод getCellRenderer.

Длинное объяснение:

вы создаете класс, расширяющий JTable, без явного присвоения ему имени вместо использованиястандартное объявление класса:

public class ExtendedJTable extends JTable{}

Видимость этого класса ограничена классом, внутри которого он определен и создан.Это очень полезно, например, когда вам нужно, как в опубликованном вами коде, переопределить метод (getCellRenderer ()) определенного класса (JTable) для некоторых целей, ограниченных текущим контекстом класса.

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

2 голосов
/ 03 сентября 2011

Здесь вы делаете 2 вещи:

  • создаете объект класса, расширяющего JTable.Это анонимный класс, потому что он нигде не объявлен отдельно.
  • В этом классе вы переопределяете метод getCellRenderer JTable (int row, int column);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...