分号 (;)在代码的末尾是让我迷失的东西。
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
方法。这也是语句,因此必须在末尾使用";"。