beanshell学习笔记(四)——scripting interface

由于对beanshell对接口的实现功能不是很清楚..故写下这篇不只是对是错的理解,主要是为了給自己留下学习时产生的疑问及即使的理解,为后来的梳理做个标记


对接口的实现是beanshell的强大之处之一,这个功能允许你写脚本来构建handle,listener或者一些java API的是实现
[b]
匿名内部类[/b]
可以使用标准的匿名内部类语法来实现java接口,如下
buttonHandler = new ActionListener() {
actionPerformed( event ) {
print(event);
}
};

button = new JButton();
button.addActionListener( buttonHandler );
frame(button);

上面的代码中,我们创建了个对象来实现ActionListener接口,并把生成的对象分配你变量buttonHandler,并实现actionPerformed(event),

在看下面的代码

actionPerformed( event ) {
print( event );
}

button = new JButton("Foo!");
button.addActionListener( this );
frame( button );

没有实现ActionListener,直接用了'this'关键字注册监听,这就体现了beanshell的自动匹配的特性,上面的actionperformed()方法的到了实现,当有关注册监听的时候,就能自动cast,
前面讲到'this'关键字代表着他在范围的对象,所以上面的代码就可以看成整个脚本implement了actionListener接口,并在脚本中直接实现了actionPerformed()

在看下面的代码:


messageButton( message ) {
JButton button = new JButton("Press Me");
button.addActionListener( this );
JFrame frame = frame( button );

actionPerformed( e ) {
print( message );
frame.setVisible(false);
}
}

messageButton("Hey you!");
messageButton("Another message...");


actionPerformed()方法是在messageButton()内部实现,前面有讲到,在beanshell中方法即可以看成对象,上面代码中的this正是代表着messageButton作用范围所代表的对象,你可以看成这个对象实现了ActionListener()接口

由此可以看出,beanshell在执行的过程中,会根据请求和参数以及返回值来自动匹配接口中的方法

不需要实现接口的所有的方法,只需要实现你使用的方法即可,如果使用你没有实现的方法,beanshell将抛出一个错误,
ml = new MouseListener() {
mousePressed( event ) { ... }
// handle the rest
invoke( name, args ) { print("Method: "+name+" invoked!");
}

由此实现多线程.可以如下方法直接实现

foo() {
run() {
// do work...
}
return this;
}

foo = foo();
// Start two threads on foo.run()
new Thread( foo ).start();
new Thread( foo ).start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值