2

我正在使用此站点的以下代码:

// Create a message handling object as an anonymous class.
private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        // Do something in response to the click
    }
};

listView.setOnItemClickListener(mMessageClickedHandler); 

现在它说:

AdapterView您可以通过实现AdapterView.OnItemClickListener接口来响应 an 中每个项目的点击事件。

如果OnItemClickListener()是一个接口,那么我们如何像上面的代码一样创建它的对象?这背后的概念是什么?

4

2 回答 2

1

我不太确定我得到你的问题,但在你上面的例子mMessageClickedHandler中是对象,并且对象实现了OnItemClickListener.onItemClick方法。如果您来自 C++ 世界,则需要将OnClickListener子类等实现为单独的实体,但在 Java 中,如上所示,您可以在内联中创建匿名子类(我希望这是正确的名称!)代码。

这不是我个人非常喜欢的一种技术,但它是一种常见的 Java 习惯用法,我只是顺其自然!

于 2013-05-17T05:53:02.340 回答
0

您不能为接口创建对象。但是,匿名内部类允许您执行以下操作:

public interface MyInterface {  
public void myMethod() ; 
}

MyInterface myIntfObj = new MyInterface() {  
    public void myMethod() {  

    }  
};  

myIntfObj.myMethod();  
于 2013-05-17T05:59:58.890 回答