我已经对使用匿名类和本地类实现闭包的区别进行了一些搜索。我试图找出两者之间的所有差异,因此我知道哪种方法在哪种情况下更好。
如果我错了,请纠正我:
- 每次创建新实例时,匿名类都会创建一个类实例和对象实例。
- 每次创建新实例时,本地类只创建一个对象实例。
因此,是否有时间或地点我应该使用匿名类而不是本地类?
编辑:看起来两者之间没有真正的区别,只取决于样式以及是否要重用该类。
为了澄清我的意思是我正在谈论的一个例子:
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);
}
};
}
}
希望有人可以详细解释这种细微的差异以及在哪种情况下应使用哪种方法。