an0*_*00b 7 java anonymous-types inner-classes
考虑这个(匿名):
speakBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
}});
Run Code Online (Sandbox Code Playgroud)
与此:(非匿名):
class MyOuterClass {
private class MyOnClickListener implements OnClickListener {
@Override
public void onClick(View view) {
mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
}
}
// later (inside some method)...
speakBtn.setOnClickListener(new MyOnClickListener());
}
Run Code Online (Sandbox Code Playgroud)
除了行数较少外,匿名表单还有其他优势吗?
有性能优势吗?
匿名内部类比内部类(如问题示例代码中所示)具有优势,因为它封闭了方法的局部变量(尽管只有final局部变量可用)。
一般来说,内部类可以很容易地转换为匿名内部类的方法,这有助于减少冗长。如果您有一个太大的内部类,您希望将其设置为非本地类,那么您可能需要考虑与 IDE 进行斗争,将其作为外部类放入一个新文件中。
(这也是本地类,它们是在方法内定义的正常命名内部类,并且封闭于本地类。)