匿名内部类(非匿名内部类)的优点是什么?

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)

除了行数较少外,匿名表单还有其他优势吗?

有性能优势吗?

Tom*_*ine 4

匿名内部类比内部类(如问题示例代码中所示)具有优势,因为它封闭了方法的局部变量(尽管只有final局部变量可用)。

一般来说,内部类可以很容易地转换为匿名内部类的方法,这有助于减少冗长。如果您有一个太大的内部类,您希望将其设置为非本地类,那么您可能需要考虑与 IDE 进行斗争,将其作为外部类放入一个新文件中。

(这也是本地类,它们是在方法内定义的正常命名内部类,并且封闭于本地类。)