-1

我开始阅读 android 教程,并找到了一个示例,其中我发现了以下情况:

button.setOnClickListner(new View.OnClickListener() { //SOME CODE} );

现在 View.OnClickListener 是一个接口,那么我理解的是,这样做我创建了一个 OnClickListener 类型的对象的实例,该实例由大括号中的代码形成。是这样吗?但它是一种使事情变得更容易的 Java 特定方式,还是一种特定的 android 编程选择?因为我从来没有在Java中看到过这样的东西,也许我没有学习很多。

4

2 回答 2

2

是这样吗?

是的。这称为创建匿名内部类的实例。

但它是一种使事情变得更容易的 Java 特定方式,还是一种特定的 android 编程选择?

这当然是有效的 Java 语法。我认为它在 Android 开发中可能比其他地方更受欢迎,部分基于 Google 提供的代码示例。事实上,我一直试图在我的书中减少对这个成语的使用,因为其他人发现它令人困惑,就像你一样。

于 2013-06-06T23:45:35.607 回答
2

它被称为anonymous inner class.

这是anonymous因为您实际上从未将其声明为变量,您只需调用new. 它没有(变量)名称,因此它是匿名的。

它是inner,因为它在另一个类中并且不可公开访问。好吧,它可以通过 访问button,但这是特定于这种用法的。

最后是一个class.

你会在 Java 中随处看到它,在 Android 中也很常见。

另一种选择是让您的类实现该接口,并通过this.

于 2013-06-06T23:46:57.670 回答