Java 调用接口时使用匿名类
我试图在Android和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 } }
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
}
}
}