我是java的新手,我想知道java中的javascript绑定是否有类似的功能。
前:
function x(bindedArg, arg1, arg2){
}
x.bind(this, 'bindedArg');
x('arg1', 'arg2');
更新
一个很好的例子就是在事件的回调函数中。
如果我需要实际事件callBack上下文中可用的对象/参数,以前在设置回调事件时可用,该怎么办。
答案 0 :(得分:1)
在Java中,你不会传递"回调"。
传递实现某些回调接口的对象实例。
然后,框架代码可以调用对象上的方法(在接口中定义),而不是调用回调。
例如
interface ClickHandler{
void handleClick(Event event);
}
// and then
final String someStateIHave = "hello";
myButton.setClickHandler(new ClickHandler(){
void handleClick(Event event){
System.out.println(someStateIHave);
}
}
正如您所看到的,有一个ClickHandler的对象实例(在这种情况下是匿名内部类,但不一定是这样)。然后,UI框架可以在此对象上调用handleClick
方法。对象可以访问它需要的任何其他对象。
这种模式(单一方法接口的匿名实现)非常频繁,以至于Java 8具有特殊,简洁的语法。
答案 1 :(得分:1)
简短的回答是否定的。但是,可以编写一个Adapter或Decorator类。例如,如果有接口,则必须匹配
interface Callback {
public callback(Error err, Data data);
}
你想要调用你的函数x,你要创建一个匿名类
new Callback() {
public callback(Error err, Data data) {
x(bindedArg, err, data);
}
}
或者,如果您打算这么做,请创建一个真正的类并将bindedArg传递给构造函数,例如
class MyCallback implements Callback {
final Object bindedArg;
public MyCallback(Object o) {
bindedArg = o;
}
public callback(Error err, Data data) {
x(bindedArg, err, data);
}
}
不像在JavaScript中那么容易,但是同样的想法,一个包装另一个函数的函数。