Java 为什么回调方法需要返回一些东西?

Java 为什么回调方法需要返回一些东西?,java,interface,callback,return-value,Java,Interface,Callback,Return Value,我以前从未见过这样的事情,所以假设我有这样一个对象: MyWhateverListener dafuqListener = new MyWhateverListener() { @Override public void onSuccessCall(String s) { // success call } @Override public void onFailCall(boolean b) { // fail call } @Override

我以前从未见过这样的事情,所以假设我有这样一个对象:

MyWhateverListener dafuqListener = new MyWhateverListener() {

  @Override
  public void onSuccessCall(String s) {
    // success call
  }

  @Override
  public void onFailCall(boolean b) {
    // fail call
  }

  @Override
  public boolean onDafuqCall(int i, boolean b) {
      // some whatever code
      return false;
  }
};
一切正常,当某些操作成功时,将调用适当的方法,但是这个
返回
内部
onDafuqCall
方法是什么,为什么需要它,它将返回什么


另外,这个界面来自一个Android广告提供商的SDK。

不清楚你问了什么,但我会试一试

接口是允许对象遵循特定模式的一种方式。例如,当我有一个名为“Listener”的接口和五种实现时,它们就派上了用场: ActionListener、MouseListener、KeyListener、CloseListener、StateChangeListener。 如果我想有一个允许用户注册用户的方法,而不必为每个实现创建单独的“registerListener”方法,我可以使用:
registerListener(Listener l)

现在回到您的帖子,接口可能包含带有返回值的方法,例如,如果我有一个名为Event的接口,它包含一个名为
isCanceled()
的方法,该方法返回布尔值,那么如果我有一个名为“ClickEvent”的实现,我想检查这个事件是否(在调用它之后)被任何人或任何东西取消,我将调用
isCanceled()
方法,该方法应返回一个值,因为它由实现对象处理

因此,为了总结这一点,调用侦听器以获取信息的代码段需要返回值。如果我们查看Java接口及其实现,就会发现大量的示例。您可以通过查看java.uti.List接口源代码和类似java.util.ArrayList的实现来检查自己

更多信息可从文档中获得:

编辑#1:下面是上面解释的示例,用代码表示:

事件接口:

package com.fillpant.examples;

public interface Event {

    public boolean isCanceled();
    public void setCanceled(boolean value);

}
ClickEvent(实现事件的):

调用ClickEvent的位置。这里我演示了为什么需要返回值(请参见
isCanceled()
方法):


如果你有任何问题,请毫不犹豫地问:这真的很正常。侦听器/观察者接口与主题/事件抛出类配对。通常,你希望你的听众与受试者的行为完全脱节,以至于受试者既不知道也不关心注册了多少听众。这是“纯”模式。这是最常见的,所有的方法都是无效的,因为它们只被主体调用,主体的行为不依赖于它的听者

然而,有时,对于监听器来说,有一些其他方法不打算被主体调用,并且监听器充当主体状态和程序其他部分之间的桥梁是有意义的。一个常见的例子是制作用于调试的特殊侦听器。在这里,您创建了一个新的侦听器,它扩展了您以前的侦听器,但它也准确地跟踪主题调用它的时间,然后它有一个带有返回值的方法,这样您的测试代码就可以访问此状态,并准确地看到该侦听器在做什么


最后,偶尔让听众影响主题的行为是有意义的。在这种情况下,返回方法是必要的。但这是罕见的,并非没有危险,它有时被用来确保以正确的顺序删除链中的内容。因此,如果未能删除子项,则停止删除链。它有一个名字,但我现在记不清这个模式的确切名称。

这是我对这个主题的理解: 通常,侦听器/回调方法不需要返回任何内容,它们被调用以响应事件。 e、 g.
onClick()

OnClickListener onClickListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        //some click handling code
    }
};
OnDragListener onDragListener = new OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
        //some drag handling code
        return false;
    }
}
但如果它们是事件链的一部分,则使用布尔返回类型中止或继续执行事件。e、 g.
onDrag()
方法来自
ondraglister

OnClickListener onClickListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        //some click handling code
    }
};
OnDragListener onDragListener = new OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
        //some drag handling code
        return false;
    }
}
此方法的文档说明“如果成功处理了拖动事件,则返回true;如果未处理拖动事件,则返回false。请注意,false将触发
视图
调用其
onDragEvent()
处理程序。”
因此,如果回调/事件处理方法是事件链的一部分,那么在回调/事件处理方法中有返回并不罕见。应该返回的内容是API文档的一部分。

该方法声明它返回一个布尔值。问题到底是什么?伙计,我知道返回的作用,但它在侦听器方法中的作用是什么?为什么是负1?问题并不像看上去的那么明显。@Radiodef所说的接口来自一个封闭的.jar文件,没有任何文档解释所有的源代码,我通常会问,回调方法中的返回是为了什么,但是回调方法从“返回”中返回的值在哪里?我想问题是“为什么回调方法需要返回一些东西?”我没听说过对不起,等一下,我会为您编写一个示例:D@BalkrishnaRawool正是我的意思,你解释得更清楚了!我加了一个例子:-)