2011-09-02 192 views
3

有人可以幫我理解下面的構造嗎?我無法理解這是初始化程序還是匿名類。我不熟悉這個語法。Java初始化塊

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

可能的重複 - http://stackoverflow.com/questions/6432545/is-this-a-variation-of-an-anonymous-inner-class – mre

回答

6

它創建了一個匿名的內部類,它擴展了JTable,並重寫了getCellRenderer方法。

朗解釋:

你正在創建一個擴展JTable中沒有一類明確分配給它一個名稱,而不是使用標準的類聲明:

public class ExtendedJTable extends JTable{} 

這個類的知名度僅限於內部類它被定義和實例化。 例如,當您需要(如在發佈的代碼中)需要重寫某個特定類(JTable)的方法(getCellRenderer())時,這對於限制於當前類上下文的某些目的非常有用。

這種方法有一些好處,也有一些限制。有關更深的討論,請看這article

2

你在這裏做兩件事情:

  • 創建擴展JTable中的類的對象。這是一個匿名類,因爲它沒有在其他地方單獨聲明。
  • 在這個類中,覆蓋了JTable的方法getCellRenderer(int row,int column);