Може ли някой да ми помогне да разбера следната конструкция? Имам проблеми с разбирането дали това е инициализатор или анонимна класа. Не съм запознат с този синтаксис.
JTable jt = new JTable(data, fields) **{
public TableCellRenderer getCellRenderer(int row, int column) {
// TODO Auto-generated method stub
return renderer;
}
};**
Отговори:
6 за отговор № 1Той създава анонимна вътрешна класа, която удължава JTable, и заменя метода getCellRenderer.
Дълго обяснение:
вашите създават клас, който разширява JTable без изрично да му придадете име вместо да използва стандартна декларация за клас:
public class ExtendedJTable extends JTable{}
Видимостта на този клас е ограничена доклас, в който тя е дефинирана и инстанция. Това е доста полезно например когато имате нужда, като в кода, който публикувахте, да замените метод (getCellRenderer ()) на определен клас (JTable), за някои цели, ограничени до текущия клас контекст.
Този подход има някои предимства, а също и някои ограничения. За по-задълбочена дискусия погледнете това статия.
2 за отговор № 2
Тук правите 2 неща:
- създайте обект от клас, който разширява JTable. Това е анонимна класа, защото не е обявена отделно никъде другаде.
- В този клас преименувате метода на JTable getCellRenderer (int ред, int колона);