【问题标题】:Why we call adding a listener to button directly as inner class?为什么我们称直接为按钮添加监听器为内部类?
【发布时间】:2012-04-02 21:20:25
【问题描述】:

如果我们像这样在 java 中的按钮上添加事件监听器:

btn.setOnClickListener(new OnClickListener(){

public void onClick(View v)
{
// Do smoething
}

});

这叫我们使用内部类,我对内部类的概念理解有问题

内部类不是这样声明的吗?

    class AOuter{
    int a=5;

     class BInner{
       // do smothing
     }

}

【问题讨论】:

    标签: java class inner-classes


    【解决方案1】:

    点击监听器是一个匿名内部类,另一个只是一个内部类。它们都是nested classes的类型

    【讨论】:

    • +1 但它们都是内部类,OP 在这方面是正确的。
    • 很好,但是为什么我们仍然把它称为一个类,尽管我们使用的是'new',我们不是在这里创建一个对象吗?!
    • 是的,我们正在创建一个新对象,但该对象的类是一个新类。我们正在继承OneClicklistener,甚至可以添加新方法——因此它是一个新类。
    • @Andrejs 很抱歉给您发送垃圾邮件,也许! .但是你在对象的类中是什么意思是一个新类??
    • 如果你这样做 new Object(); 它只会创建新对象,如果你这样做 new Object(){...} 你实际上已经继承了 Object 类并创建了新类,你可以在其中定义新方法/字段。
    【解决方案2】:

    您提供给 setOnClickListener 的类不能在别处实例化。它只是作为该函数的参数存在,而在第二个代码段中定义的类是嵌套的,并且可以正常实例化。

    【讨论】:

      【解决方案3】:

      @Andrejs 是正确的。人们使用匿名内部类添加侦听器的原因通常是因为这是一次性的事情,您不会重用该动作/侦听器。但是,如果计划重用该侦听器/操作,则应明确定义它以使其可重用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-03
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 2017-10-18
        • 2020-10-26
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多