Why is java.util.Observable not an abstract class?

Quite simply it’s a mistake that Observable is a class at all, abstract or otherwise.

Observable should have been an interface and the JDK should have provided a convenient implementation (much like List is an interface and ArrayList is an implementation)

There are quite a few “mistakes” in java, including:

  • java.util.Stack is a class, not an interface (like Observable, bad choice)
  • java.util.Properties extends java.util.Hashtable (rather than uses one)
  • The java.util.Date class is a bit of a mess, and is not immutable!
  • The java.util.Calendar class is a real mess
  • No unsigned ‘byte’ type (this is a real pain and the source of many low-level bugs)
  • java.sql.SQLException is a checked exception
  • Arrays don’t use Arrays.toString(array) as their default toString() (how many SO questions has this caused?)
  • Cloneable shouldn’t be a marker interface; it should have the clone() method and Object.clone() should not exist

While on the soapbox, in terms of the language itself, IMHO:

  • == should execute the .equals() method (this causes loads of headaches)
  • identity comparison == should either be === like javascript or a dedicated method like boolean isIdentical(Object o), because you hardly ever need it!
  • < should execute compareTo(Object o) < 0 for Comparable objects (and similarly for >, <=, >=)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)