天天看点

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