/ / Java Initialization Block: java, swing, jtable, classe anonima, inizializzatore

Java Initialization Block: java, swing, jtable, classe anonima, inizializzatore

Qualcuno può aiutarmi a capire il seguente costrutto? Non riesco a capire se si tratta di un inizializzatore o di una classe anonima. Non ho familiarità con questa sintassi.

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

risposte:

6 per risposta № 1

Crea una classe interna anonima che estende JTable e sovrascrive il metodo getCellRenderer.

Spiegazione lunga:

stai creando una classe che estende JTable senza assegnargli esplicitamente un nome invece di utilizzare la dichiarazione della classe standard:

public class ExtendedJTable extends JTable{}

La visibilità di questa classe è limitata alclasse all'interno della quale è definita e istanziata. È abbastanza utile ad esempio quando hai bisogno, come nel codice che hai postato, di sovrascrivere un metodo (getCellRenderer ()) di una particolare classe (JTable), per alcuni scopi limitati al contesto corrente della classe.

Questo approccio ha alcuni vantaggi e anche alcune limitazioni. Per una discussione più approfondita, dai un'occhiata a questo articolo.


2 per risposta № 2

Stai facendo 2 cose qui:

  • crea un oggetto di una classe che estende JTable. Questa è una classe anonima perché non è dichiarata separatamente da nessun'altra parte.
  • In questa classe, si esegue l'override del metodo di JTable getCellRenderer (riga int, colonna int);