Java 回调和接口之间的区别

Java 回调和接口之间的区别,java,android,oop,interface,callback,Java,Android,Oop,Interface,Callback,这两段代码之间有什么区别 btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); 是视图类的内部接口,如果我们知道该接口不能实例化的话 这里呢 soInterface.getAnswers().enqueue(new Callback<SOAnswersResponse>() {

这两段代码之间有什么区别

 btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
是视图类的内部接口,如果我们知道该接口不能实例化的话

这里呢

soInterface.getAnswers().enqueue(new Callback<SOAnswersResponse>() {
      @Override
      public void onResponse(Call<SOAnswersResponse> call, retrofit2.Response<SOAnswersResponse> response) {

      }

      @Override
      public void onFailure(Call<SOAnswersResponse> call, Throwable t) {

      }
  });
soInterface.getAnswers().enqueue(新回调()命令){
@凌驾
公共void onResponse(呼叫,改装2.响应){
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
它在enqueue方法中需要的回调,这个语法定义的,是接口“callback”,在某些地方定义的,我们在这里把它称为内联接口,但接口不能像回调语法所说的“newcallback(){}”那样实例化

这两段代码之间有什么区别

 btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
两者都是2个不同的接口

查看。OnClickListener
-此界面帮助您收听查看单击操作


回调
-尝试从服务器获取响应

同时查看
视图。OnClickListener
回调
是接口

OnClickListener
嵌套在
View
类中。改装
回调
未嵌套

这是
回调
接口文档:

接口无法实例化

我们在这里实例化一个
匿名类。i、 e.我们将
接口
实现为一个
匿名类
,并动态实例化该
匿名类

从Java:

它们[匿名类]使您能够声明和实例化一个类 同时,。他们和当地的班级一样,只是他们没有 有名字。如果只需要使用一次本地类,请使用它们


在本例中,两个类都是带有回调的接口。匿名类实现了
View.OnClickListener
,它在
onClick
上有一个回调。实现
Callback()
的匿名类也是如此。这一次,它有一个类型化参数和两个用于
onResponse
onFailure
的回调


接口不能被实例化的语句是true,但是您可以创建它的匿名类。请参见

它们都是接口:

  • CallBack表示改装的响应(回调),当它出现时,您进入onResponse或它无法恢复(在10秒时间内)、被读取(错误解析)或其他原因,然后将执行onFailure

  • 当onClickListener正在收听时,单击按钮


您可以在活动或片段中实现onClick listener的接口,并使用按钮。SetOnClick listener(此)与改装相同。

您是正确的,无法实例化接口。接口是必须由具体类实现的一组方法的定义

在这两种情况下,您的代码使用的都是匿名内部类。Java语法允许您指定您想要实现指定接口的“某物”的新实例,但您不想编写所有代码来实现该接口。您的代码只提供该接口定义的抽象方法的实现

如果您查看应用程序的类文件,您将看到类似MyClass$1.class的内容,它是由编译器合成生成的类文件。编译器创建一个名为MyClass$1的类,该类实现您用定义的方法指定的接口。然后,编译器会在编译代码之前使代码看起来像这样:

btn.setOnClickListener(new MyClass$1());

这同样适用于第二个示例,但使用了不同的接口,等等。

这意味着回调是接口,而不是视图中的内部类接口。onclicklistener,是的,这只是一个接口。您可以在任何地方定义接口,在View.onclicklistener中,它们在View.java中都很好,但语法是新的回调(){}这似乎是它的实例化,我们知道接口不能被实例化它们的接口名为回调,就像onclicklistener,这只是一个名称,而接口(和其他抽象类一样)不被实例化,是实现给定接口(或扩展抽象类)的匿名内部类可以用以下形式实例化:
newinterface(){…抽象方法的实现…}
是不同于我们在Interface中定义的方法的抽象方法Java中的接口是一个抽象类,所有方法都是
public abstract
,所有变量都是
public static final
。。。好的,至少在Java8函数接口之前……谢谢:)你们能给出任何关于接口作为匿名类实现的链接吗,这些东西需要解释一下吗