How (not) to write Factorial in Java.
So please, do us all a favor: if you have the urge to add complexity because “someday we’ll need it, I just know it!”, or because “it’s not sufficiently flexible enough” or “we need reusability in our code” or (God help us!) because it’s “cool”–just go home early.
more on chaosinmotion.com
Fantastic article on overengineering, featuring idiomatic Java programming style.