Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用接口时使用匿名类_Java_Android - Fatal编程技术网

Java 调用接口时使用匿名类

Java 调用接口时使用匿名类,java,android,Java,Android,我试图在Android和Java中完全集成匿名类和接口的概念。在另一个线程中,给出了一个答复 关于以下内容的问题: getQuote = (Button) findViewById(R.id.quote); getQuote.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do something clever } }

我试图在Android和Java中完全集成匿名类和接口的概念。在另一个线程中,给出了一个答复 关于以下内容的问题:

getQuote = (Button) findViewById(R.id.quote);

getQuote.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        // Do something clever
    }
}
“在那里发送的是一个匿名类,您可以创建一个单独的类来实现OnClickListener,并创建该类的实例,然后将其作为参数发送给setOnClickListener。”--Jon

我的问题是,如果创建一个实现OnClickListener的独立类,那么代码会是什么样子? 我想如果我看到这条长长的路,会更有意义。非常感谢

//somewhere in your class or even as its own top-level class:
static class MyOnClickListener implements View.OnClickListener {

    @Override
    public void onClick(View v) {
        // Do something clever
    }
}

getQuote.setOnClickListener(new MyOnClickListener());
请注意,显式定义的类的位置可能会有所不同。如果它包含在您的类中,您可能能够声明它
static
,也可能不能(取决于聪明的东西需要访问实例成员)


当您创建了很多匿名类时,由于除了声明和绑定它们的位置之外,它们不是必需的,所以匿名类被认为是一种更简洁的方法。

它看起来像这样:

getQuote = (Button) findViewById(R.id.quote);
getQuote.setOnClickListener(new MyClickListener(param));

// in a separate class file:    
public class MyClickListener extends View.OnClickListener{
    private Param param;

    public MyClickListener(Param p){
        this.param = p;
    }

    @Override
    public void onClick(View v) {
        // Do something clever with param
    }
}

匿名类的好处在于,它们可以直接使用定义它们的范围中的所有实例字段和最终局部变量,从而节省编写和维护所有参数传递和保留代码的工作量。

好吧,您可以创建顶级类(新文件中的类),或者可以将类作为内部类嵌入到使用它的类中

这是一个顶级课程:

public class MyOnClickListener implements View.OnClickListener {
    public void onClick(View v) {
        //do something
    }
}
下面是一个嵌入式类:

public class MyActivity extends Activity {

    class MyOnClickListener implements View.OnClickListener {
        public void onClick(View v) {
            //do something
        }
    }
}
public class MyActivity extends Activity {

    class MyOnClickListener implements View.OnClickListener {
        public void onClick(View v) {
            //do something
        }
    }
}