OnClickListener是一个静态接口,但我从OnClickListener实例化。
我很困惑,想知道我们可以从java中的接口生成对象吗?
为什么我们不创建具体类,继承自OnClickListener接口?
答案 0 :(得分:5)
这就是所谓的匿名内部类。 Java Standard Edition的Swing文档涵盖了它here,我认为它在Android开发中用于很多相同的目的。它允许您更简单地将各种事件处理程序接口连接到触发这些事件的组件。例如,如果在其他任何地方都不需要在此OnClickListener中执行的操作,那么现在您已将其限制为使用它的唯一类。您不需要在源代码树中使用另一个类文件,而且在该特定UI组件中发生的事情会更加明显。
在幕后,编译器正在创建一个具有自动生成名称的类,它确实实现了OnClickListener
。您可能会在堆栈跟踪中看到这种情况,其中包含名为com.foo.Class$1
的类。 $1
是编译器为您的类生成的。
答案 1 :(得分:1)
您没有实例化界面。您使用以下代码执行的操作是直接创建接口的实现并将其存储在tv_onClick变量中。
private OnClickListener tv_onClick = new OnClickListener() {
public void onClick(View arg0) { }
}