我开始阅读一个Android教程,我找到了一个例子,我发现了以下情况:
button.setOnClickListner(new View.OnClickListener() { //SOME CODE} );
现在View.OnClickListener是一个接口,然后我理解的是,通过这种方式,我创建了一个由大括号中的代码形成的OnClickListener类型的对象的实例。是这样吗?但它是一种java特定的方式来使事情更容易,还是一个特定的Android编程选择?因为我从来没有在Java中看到这样的东西,也许我没有经常学习。
答案 0 :(得分:2)
是这样吗?
是。这称为创建an anonymous inner class的实例。
但这是一种特殊的方法吗?或者它是特定的Android编程选择吗?
这当然是有效的Java语法。我认为它在Android开发中可能比其他地方更受欢迎,部分基于Google提供的代码示例。事实上,我一直试图在我的书中减少对这个习语的使用,因为其他人发现它像你一样令人困惑。
答案 1 :(得分:2)
它被称为anonymous inner class
。
它是anonymous
,因为您实际上从未将其声明为变量,只需拨打new
即可。它没有(变量)名称,因此它是匿名的。
它是inner
,因为它在另一个类中,不可公开访问。好吧,可以通过button
访问它,但这是特定于此用途的。
最后是class
。
你会在Java中看到它,它在Android中很常见。
另一种方法是让您的类实现该接口,并传递this
。