在java中是否有类似javascript绑定的函数

时间:2014-08-01 05:53:48

标签: java javascript

我是java的新手,我想知道java中的javascript绑定是否有类似的功能。

前:

function x(bindedArg, arg1, arg2){

}

x.bind(this, 'bindedArg');

x('arg1', 'arg2');

更新

一个很好的例子就是在事件的回调函数中。

如果我需要实际事件callBack上下文中可用的对象/参数,以前在设置回调事件时可用,该怎么办。

2 个答案:

答案 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中那么容易,但是同样的想法,一个包装另一个函数的函数。