从OnClickListener接口创建对象

OnClickListener是一个静态接口,但我从OnClickListener实例化。

我很困惑,并想知道我们可以从java中的接口生成对象吗?

为什么我们不创建具体的类,inheritance自OnClickListener接口? 在此处输入图像描述

在此处输入图像描述

这就是所谓的匿名内部类 。 Java Standard Edition的Swing文档在这里介绍它,我想它在Android开发中用于很多相同的目的。 它允许您更简单地将各种事件处理程序接口连接到触发这些事件的组件。 例如,如果在其他任何地方都不需要在此OnClickListener中执行的操作,那么现在您已将其限制为唯一使用它的类。 您不需要在源代码树中使用另一个类文件,并且在该特定UI组件中发生的事情会更加明显。

在幕后,编译器正在创建一个具有自动生成名称的类,它确实实现了OnClickListener 。 您可能会在堆栈跟踪中看到这个,其中有一个名为com.foo.Class$1的类。 $1是编译器为您的类生成的。

您没有实例化该接口。 您使用以下代码执行的操作是直接创建接口的实现并将其存储在tv_onClick变量中。

 private OnClickListener tv_onClick = new OnClickListener() { public void onClick(View arg0) { } }