“new View.onClickListener(){...}”这是什么?

时间:2013-06-06 23:43:02

标签: java android

我开始阅读一个Android教程,我找到了一个例子,我发现了以下情况:

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

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

2 个答案:

答案 0 :(得分:2)

  

是这样吗?

是。这称为创建an anonymous inner class的实例。

  

但这是一种特殊的方法吗?或者它是特定的Android编程选择吗?

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

答案 1 :(得分:2)

它被称为anonymous inner class

它是anonymous,因为您实际上从未将其声明为变量,只需拨打new即可。它没有(变量)名称,因此它是匿名的。

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

最后是class

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

另一种方法是让您的类实现该接口,并传递this