Czy istnieje różnica w skuteczności (na przykład czas wykonania, rozmiar kodu itp.) Między tymi dwoma sposobami działania?Implikacje wydajności anonimowej klasy Javy
Poniżej znajdują się przykłady, które tworzą obiekty i nie robią nic, ale moje rzeczywiste scenariusze mogą tworzyć nowe wątki, nasłuchiści itp. Załóżmy, że następujące fragmenty kodu występują w pętli, co może mieć znaczenie.
Korzystanie anonimowe obiekty:
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
}
};
}
}
Definiowanie klasy pierwszej:
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() {}
};
Powinieneś zrobić to, co uważasz za najczystsze i najłatwiejsze do zrozumienia, różnica w wydajności powinna być znacznie mniejsza niż praca wykonywana w doWork(), więc nie będzie to miało znaczenia. Gdybym miał oszacować różnicę, oczekiwałbym około 10 nanosekund. –
Jeśli nie robiłeś kodu krytycznego dla wydajności, a Twój wykład nie zawiera – LegendLength