When Java was first introduced, it had a huge missing piece: enumerated types. Apparently Sun didn't appreciate the lowered project risk brought about by strongly-typed parameters—or care if the language made it just as easy to pass the direction integer argument SOUTH when the currency integer argument DOLLARS was expected. (I'm almost surprised Java didn't originally require FALSE=0 and TRUE=1 integers intead of an actual boolean type!) Now that Java has finally got around to add enums, there's plenty to like (ordinals, singletonality, use in case statements, to name a few things), but they still have some significant and needless shortcomings.