Phinal Phormat    [ design/ ]

What idiot made the format() method in java.text.DateFormat? Come on, own up!

For goodness sake! Now nobody can ever make the damn thing threadsafe. Everybody gets to synchronize or lock around the calls to format (and applyPattern and any other state-altering methods.) The whole world has to do the same repetetive, boring, unnecessary work, over and over and over again, just because some fool made the method final.

The same thing goes for the Currency class, which is final with a private constructor. Instances are obtained through factory methods that only understand the standa currecy code. So, if you're planning on writing any sort of Local Currency Trading System using Java, forget about using the Currency class, which would otherwise be an incredibly useful thing to do.

Please, when you're designing a class, don't ever make the class or its methods final unless you have a very, very good reason for doing so. And by very good reason, I mean that it is doing something cryptographic or otherwise incredibly sensitive that really must not ever be overriden.

OK; the argument can be softened slightly if we start talking about classes whose instances come via a Service Provider Interface (as javax.text's classes are) but in many cases all it does is create unnecessary agravation.

I don't believe any of us can see far enough into the future to make methods final, so the motivation for doing so had better be damn compelling.