天天看點

BeanShell腳本接口之匿名類

BeanShell 最強大的功能之一就是具有編寫 Java 接口腳本的能力。這個功能允許你編寫腳本用作事件處理、監聽以及其他 Java API 的元件。它也可以從你的應用中更簡單得調用腳本化的元件,因為它們可以被看作任何其他 Java 對象。

獲得腳本的元件來實作一個 Java 接口的一種方法是使用标準的 Java 匿名内部類建構腳本的對象實作的接口類型的文法。

<b>示例代碼</b>

buttonHandler = new ActionListener() { 

  actionPerformed( event ) { 

    print(event); 

  } 

}; 

button = new JButton(); 

button.addActionListener( buttonHandler ); 

frame(button); 

<b>運作效果</b>

<a target="_blank"></a>

點選“My Button”後,顯示如下。

在上面的例子中我們建立了一個對象,實作了“ActionListener”接口并賦予一個名叫“buttonHandler”的變量。“buttonHandler”對象包含腳本方法“actionPerformed()”,它将被調用來處理該接口上的方法調用。

請 注意在示例中我們使用 JButton 自己的方法“addActionListener()”将它和已經腳本化的 ActionListener 進行了注冊。當然 Jbutton 是 Java 編寫的标準 Swing 元件。不知當它調用“buttonHandler”的 actionPerformed() 方法時竟然這會導緻 BeanShell 解釋器運作一個腳本來評估結果。

在上面的例子上再多總結 一下——腳本接口是通過查找腳本方法來實作接口方法的方式來工作的。一個 Java 方法調用一個腳本來實作一個接口導緻 BeanShell 通過比對簽名(名稱和變量類型)來尋找一個對應的腳本方法。BeanShell 然後調用方法,傳遞參數以及傳遞任何傳回值。當 BeanShell 作為其他的代碼運作在同一個 Java 虛拟機上,你可以自由地傳遞“存活着的” Java 對象作為參數和傳回值,在你的腳本中動态地同他們進行運作;是無縫內建的。

本文轉自 tongqiuyan  51CTO部落格,原文連結:http://blog.51cto.com/tongqiuyan/759297