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

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

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

person EdgeCase    schedule 02.09.2011    source источник
comment
Возможный дубликат - stackoverflow.com/questions/6432545/   -  person mre    schedule 03.09.2011


Ответы (2)


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

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

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

public class ExtendedJTable extends JTable{}

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

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

person Heisenbug    schedule 02.09.2011

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

  • создать объект класса, который расширяет JTable. Это анонимный класс, потому что он больше нигде не объявлен отдельно.
  • В этом классе вы переопределяете метод JTable getCellRenderer(int row, int column);
person TotoroTotoro    schedule 02.09.2011