Есть ли разница в эффективности (например, время выполнения, размер кода и т. Д.) Между этими двумя способами выполнения действий?
Ниже приведены надуманные примеры, которые создают объекты и ничего не делают, но мои реальные сценарии могут заключаться в создании новых потоков, прослушивателей и т. Д. Предположим, что следующие циклы кода происходят в цикле, чтобы это могло иметь значение.
Использование анонимных объектов:
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() {}
};