Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中是否有类似javascript绑定的函数_Java_Javascript - Fatal编程技术网

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

java中是否有类似javascript绑定的函数,java,javascript,Java,Javascript,我是java新手,我想知道java中是否有类似javascript绑定的功能 例: 更新: 事件的回调函数就是一个很好的例子 如果我需要一个在实际事件回调上下文中可用的对象/参数,该对象/参数以前在设置事件回调时可用。在Java中,您不会传递“回调” 传递实现一些回调接口的对象实例 框架代码可以调用对象上的方法(在接口中定义),而不是调用回调 比如说 interface ClickHandler{ void handleClick(Event event); } // and

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

例:

更新:

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


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

在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
方法。对象可以访问它需要的任何其他对象


这种模式(单方法接口的匿名实现)非常频繁,以至于Java8为其提供了一种特殊、简洁的语法

简单的答案是否定的。但是,可以编写一个小的适配器或装饰器类。例如,如果存在必须匹配的接口

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那么简单,但同样的想法是,用一个函数来包装另一个函数。

在Java中,这个
与JavaScript中的这个概念不同。如果你有一个例子,说明你在Java中需要它,你会得到更好的答案。通常情况下,在Java中不会传递函数,通常会有另一种方法来实现它(如侦听器模式或实现某些接口的匿名内部类)。在Java脚本中,绑定允许将“this”的值设置为特定对象,重用方法和curry函数。但在Java中,这些是不同的概念。@Thilo我希望更新能提供一个关于它的图片。@Beast:不太可能。这在Java中通常不会发生。您不会传递回调,而是传递具有处理回调的方法的对象。因此,在某种程度上,您可以传递回调和
this
。但是@Thilo,我们在clickHandler的范围之外维护一个字符串,我想要的是
myButton.setClickHandler(new clickHandler(){void handleClick(String SomeStateHave,Event Event){})
someStateIHave应作为handleClick函数的参数提供。您可以向方法的接口添加更多参数。但是我不会把它叫做“state”。假设我想要
字符串'SomeStr'
,即使我们在接口中添加参数,也不会等于
'SomeStr'
,对吗@Thilo希望我没有混淆:)这正是我大脑想出的想法,我们可以从构造函数参数中获取数据,然后调用我们想要的函数并添加参数。不过,我的想法与此没什么不同,就像在接口构造函数参数中获取数据,然后在回调函数定义区域中访问。接口“构造函数”不能获取任何参数-您需要额外的努力来定义一个类。然而,碰巧在作用域中的变量可以在匿名类/“类似闭包的东西”中使用,但需要注意。如果你打算经常做同样的事情,我认为努力学习是值得的。否则使用匿名类。YMMV。
class MyCallback implements Callback {
   final Object bindedArg;

   public MyCallback(Object o) { 
      bindedArg = o;
   }

   public callback(Error err, Data data) {
      x(bindedArg, err, data);
   }

}