代码末尾的分号(;)是让我迷失的东西。
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());
}
};
答案 0 :(得分:8)
我们这里有一个匿名的内部类。实际上会发生什么,你说“我想使用一个这个时间扩展View.OnClickListener
”的对象。然后通过指定onClick
方法代码直接内联提供该对象类型的实现。
您发布的整个代码只是一个分配,转换为:
A a = new SubclassOfA();
其中SubclassOfA
直接内联定义。
答案 1 :(得分:4)
你所拥有的是一个匿名内部类的实例的实例化。分号结束赋值语句,该语句将新实例分配给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());
}
}
答案 2 :(得分:2)
末尾的半冒号是onSave声明的结尾。
就像你有:
String onSave = "hello"
;
除了“hello”位被更复杂的结构取代!
答案 3 :(得分:2)
它是一个匿名类的实例。因此最后是分号。
答案 4 :(得分:1)
您正在定义OnClickListener
的实例。由于这是界面,您必须实现它的onclick
方法。这也是声明,因此“;”必须在最后使用。