When sub-classing AbstractCollection
, I must still implement size()
, even though (I believe) there is a reasonable correct (though non-performant) default implementation:
public int size() {
int count = 0;
for (Iterator<E> i = iterator(); i.hasNext();) {
i.next();
count++
}
return count;
}
Why did the designers not include a default implementation of size()
? Were they trying to force developers to consciously think about this method, hopefully causing the developer to offer an implementation that performs better than the default?
I suspect your last sentence is the real reason. When subclassing an abstract class it's sometimes tempting to only override the abstract methods. I would expect almost every implementation to have a better implementation than just iterating - so if you want pretty much everyone to override a method, it's probably a good idea not to provide a base (slow) implementation. It just reduces chances of screwing up :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With