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