匿名クラスとローカルクラスを使用してクロージャを実装する際の違いについて、いくつか検索しました。私は2つの違いをすべて理解しようとしているので、どの方法がどの状況で優れているかがわかります。
私が間違っている場合は私を訂正してください:
- 匿名クラスには、新しいインスタンスが作成されるたびに作成されるクラスインスタンスとオブジェクトインスタンスがあります。
- ローカルクラスには、新しいインスタンスが作成されるたびに作成されるオブジェクトインスタンスのみがあります。
したがって、ローカルクラスよりも匿名クラスを使用する必要がある時間や場所はありますか?
編集:2つの間に実際の違いはないようです。スタイルと、クラスを再利用するかどうかによって異なります。
ここで私が何を意味するのかを明確にするために、私が話していることの例を示します。
public class ClosureExample {
interface Function {
void func(int value);
}
public static void main(final String[] args) {
final Function local1 = localClassClosure("Local1");
final Function local2 = localClassClosure("Local2");
final Function anonymous1 = anonymousClassClosure("Annonymous1");
final Function anonymous2 = anonymousClassClosure("Annonymous2");
for (int i = 0; i < 3; i++) {
local1.func(i);
local2.func(i);
anonymous1.func(i);
anonymous2.func(i);
}
}
private static Function localClassClosure(final String text) {
// Local class name is irrelevant in this example
class _ implements Function {
@Override public void func(final int value) {
System.out.println(text + ":" + value);
}
}
return new _();
}
private static Function anonymousClassClosure(final String text) {
return new Function() {
@Override public void func(final int value) {
System.out.println(text + ":" + value);
}
};
}
}
うまくいけば、誰かがこの微妙な違いと、どのような状況でどの方法を使用すべきかを詳細に説明できるでしょう。