/ / Java Initialization Block - java, swing, jtable, anonymous-class, inicjator

Blok inicjowania Java - java, swing, jtable, anonymous-class, initializer

Czy ktoś może mi pomóc zrozumieć następującą konstrukcję? Mam problem ze zrozumieniem, jeśli jest to inicjator lub anonimowa klasa. Nie znam tej składni.

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

Odpowiedzi:

6 dla odpowiedzi № 1

Tworzy anonimową klasę wewnętrzną, która rozszerza JTable i nadpisuje metodę getCellRenderer.

Długie wyjaśnienie:

Tworzysz klasę, która rozszerza JTable bez jawnego przypisania jej nazwy zamiast używania deklaracji standardowej klasy:

public class ExtendedJTable extends JTable{}

Widoczność tej klasy jest ograniczona doklasa, w której jest zdefiniowana i utworzona. Jest to bardzo przydatne na przykład wtedy, gdy potrzebujesz, tak jak w opublikowanym przez ciebie kodzie, nadpisanie metody (getCellRenderer ()) określonej klasy (JTable), w niektórych celach ograniczonych do bieżącego kontekstu klasy.

Takie podejście ma pewne zalety, a także pewne ograniczenia. Dla głębszej dyskusji przyjrzyj się temu artykuł.


2 dla odpowiedzi nr 2

Robisz 2 rzeczy tutaj:

  • utworzyć obiekt klasy, która rozszerza JTable. To jest anonimowa klasa, ponieważ nie jest zadeklarowana osobno nigdzie indziej.
  • W tej klasie nadpisujesz metodę JTable getCellRenderer (int row, int column);