Your mind is a terrible profiler
Today I found the following interface while doing a code review:interface DeliveryListener {
void deliveryFulfilled(Delivery delivery);
void deliveriesFulfilled(Set<Delivery> deliveries);
}
This code offends me because the first interface method is a special case of the second method. Why not just use a singleton list! When prompted, the code's author claimed that providing two methods was better:Creating a whole object is a waste of CPU
Your mind is a terrible profiler. The
deliveryFulfilled
method would not be a hotspot in the application, so micro-optimizations like this one only serve to obfuscate the source code. Whenever you review code and the justification for design is "optimization", be very suspicious. Never trust any optimization that doesn't have a repeatable test that justifies its existence.The second method invokes the first method anyway, so the cost is zero
If this was the case, then the calling code should just do the loop for you, and only the first method should exist. Leaking implementation details in the interface is a bad thing, because it forces the design.
As software engineers, we're paid to express business processes in Java code. Our business models should be as simple and straightforward as possible. Leave the optimizations for later, you'll do a better job.