public function getField($position)
    {
        if (!isset($this->fields[$position])) {
            switch ($position) {
                case 0:
                    $this->fields[$position] = new SecondsField();
                    break;
                case 1:
                    $this->fields[$position] = new MinutesField();
                    break;
                case 2:
                    $this->fields[$position] = new HoursField();
                    break;
                case 3:
                    $this->fields[$position] = new DayOfMonthField();
                    break;
                case 4:
                    $this->fields[$position] = new MonthField();
                    break;
                case 5:
                    $this->fields[$position] = new DayOfWeekField();
                    break;
                default:
                    throw new InvalidArgumentException(
                        $position . ' is not a valid position'
                    );
            }
        }
        return $this->fields[$position];
    }