gpt4 book ai didi

Java "Closures"本地类与匿名类的比较

转载 作者:行者123 更新时间:2023-11-30 09:32:20 25 4
gpt4 key购买 nike

我已经对使用匿名类和本地类实现闭包的区别进行了一些搜索。我试图找出两者之间的所有区别,以便我知道哪种方法在哪种情况下更好。

如果我错了请纠正我:

  • 匿名类在每次创建新实例时都会创建一个类实例和对象实例。
  • 每次创建新实例时,本地类只创建一个对象实例。

因此,我是否应该在某个时间或地点使用匿名类而不是本地类?

编辑:两者之间似乎没有真正的区别,仅取决于样式以及您是否要重用该类。

为了阐明我的意思,我举了一个例子:

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);
}
};
}
}

希望有人能详细解释这种细微的差别,以及在什么情况下应该使用哪种方法。

最佳答案

这引起了我的兴趣,我打开JD-GUI查看反编译的类。编译后这两个匿名内部类其实完全没有区别:

本地类:

class ClosureExample$1t implements ClosureExample.Function{
ClosureExample$1t(String paramString){
}

public void func(int value){
System.out.println(this.val$text + ":" + value);
}
}

匿名类:

class ClosureExample$1 implements ClosureExample.Function{
ClosureExample$1(String paramString){
}

public void func(int value){
System.out.println(this.val$text + ":" + value);
}
}

这两种方法都是实现匿名内部类的有效方法,而且它们似乎做的事情完全相同。

编辑:我将 _ 类重命名为 t

关于Java "Closures"本地类与匿名类的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com