为什么匿名类可以用作参数?

时间:2015-11-17 06:16:42

标签: java android

请考虑以下代码:

test = (Button) findViewById(R.id.testButton);

test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

    // Do something 
}

}

所以我很困惑,因为new View.OnClickListener(){}声明了一个匿名类但不应该允许将类用作参数?我以为只有对象可以这样做,为什么这个匿名类强调类作为参数?此外,如果该类用作参数,该方法如何被调用?

3 个答案:

答案 0 :(得分:0)

实际上,它是作为参数传递的对象,而不是类。 new View.OnClickListener()是创建对象的语句。 可能误导你的只是你正在定义一个就地方法,但你必须这样做,因为View.OnClickListener是一个抽象类,并没有提供onClick()方法的实现。 / p>

答案 1 :(得分:0)

这里匿名类不作为参数,但new是创建一个对象或缓冲区,并提供该缓冲区的引用作为参数。

答案 2 :(得分:0)

当您调用new View.OnClickListener()时,您创建了一个对象,因此您不使用类作为参数。没关系。您只是不将链接保存到某个变量(由您自己创建),但现在链接已保存到您的按钮对象中,因此它不会丢失,而且不会丢失。摧毁你的倾听者。

方法被调用,因为它总是发生。