我有一个有效的代码块,我想问一下这里到底发生了什么



分号 (;)在代码的末尾是让我迷失的东西。

private View.OnClickListener onSave = new View.OnClickListener() {
    public void onClick(View v) {
        EditText name=(EditText)findViewById(R.id.name);
        EditText address=(EditText)findViewById(R.id.addr);
        r.setName(name.getText().toString());
        r.setAddress(address.getText().toString());
    }
};

我们这里有一个匿名的内部类。 实际上发生的事情是你在说"我想使用一个扩展View.OnClickListener的对象"。然后,通过指定onClick方法代码,直接内联提供该对象类型的实现。

您发布的整个代码只是一个作业,翻译为:

A a = new SubclassOfA();

其中SubclassOfA直接内联定义。

您拥有的是匿名内部类实例的实例化。分号结束将新实例分配给 onSave 的赋值语句。它基本上是这个的简写:

private View.OnClickListener onSave = new MyClickListener();
//                                  the same semicolon ----^
// ...elsewhere, but inside your class...
private class MyClickListener extends View.OnClickListener() {
    public void onClick(View v) {
        EditText name=(EditText)findViewById(R.id.name);
        EditText address=(EditText)findViewById(R.id.addr);
        r.setName(name.getText().toString());
        r.setAddress(address.getText().toString());
    }
}
末尾

的分号是 onSave 声明的结尾。

就像你有:

String onSave = "hello"
;

除了"hello"位被更复杂的结构所取代!

它是

匿名类的实例。 因此最后是分号。

您正在定义 OnClickListener 的实例。由于这是接口,因此您必须实现它onclick方法。这也是语句,因此必须在末尾使用";"。

相关内容

最新更新