Slight correction: - make NumberProperty, EnumProperty, EnumNumber and StringProperty final, so instanceof suffices in the check for equality - instead of subclassing NumberProperty, make EnumNumber implement the Numeric interface