这两种做事方式的效率(例如执行时间、代码大小等)有什么不同吗?
以下是创建对象但什么都不做的人为示例,但我的实际场景可能是创建新线程、监听器等。假设以下代码片段发生在循环中,这样可能会有所作为。
使用匿名对象:
void doSomething() {
for (/* Assume some loop */) {
final Object obj1, obj2; // some free variables
IWorker anonymousWorker = new IWorker() {
doWork() {
// do things that refer to obj1 and obj2
}
};
}
}
先定义一个类:
void doSomething() {
for (/* Assume some loop */) {
Object obj1, obj2;
IWorker worker = new Worker(obj1, obj2);
}
}
static class Worker implements IWorker {
private Object obj1, obj2;
public CustomObject(Object obj1, Object obj2) {/* blah blah */}
@Override
public void doWork() {}
};
最佳答案
匿名类和顶级类之间的唯一实际区别是匿名类将包含对外部类的隐式引用。
这不会体现在性能上,但如果您对这些类进行序列化,则会对您产生影响。
关于Java 匿名类效率影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028341/