Java: Перечислимый параметр в методе

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

29
задан Sean Patrick Floyd 1 December 2010 в 14:47
поделиться

5 ответов

Это должно сделать это:

private enum Alignment { LEFT, RIGHT };    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  if (align == Alignment.LEFT)
  {
    //Process it...
  }
}
59
ответ дан Carra 28 November 2019 в 00:49
поделиться

Еще более прохладный с перечислениями можно использовать переключатель:

switch (align) {
   case LEFT: { 
      // do stuff
      break;
   }
   case RIGHT: {
      // do stuff
      break;
   }
   default: { //added TOP_RIGHT but forgot about it?
      throw new IllegalArgumentException("Can't yet handle " + align);

   }
}

Перечисления прохладны, потому что вывод исключения будет названием перечисления значений, а не некоторым произвольным международным значением.

21
ответ дан Joshua DeWald 28 November 2019 в 00:49
поделиться

Мне нравится это намного лучше. уменьшает, если/переключатель, просто сделайте.

private enum Alignment { LEFT, RIGHT;

void process() {
//Process it...
} 
};    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  align.process();
}

, конечно, это может быть:

String process(...) {
//Process it...
} 
4
ответ дан Zamir 28 November 2019 в 00:49
поделиться

Несомненно, Вы могли использовать перечисление. Что-то хотело бы следующую работу?

enum Alignment {
    LEFT,
    RIGHT
}

частная статическая Строка drawCellValue (интервал maxCellLength, Строковое значение ячейки, выравнивание Выравнивания) {}

, Если Вы хотели использовать булевскую переменную, Вы могли бы переименовать выровнять параметр к чему-то как alignLeft. Я соглашаюсь, что эта реализация не является столь же чистой, но если Вы не ожидаете много изменений, и это не открытый интерфейс, это мог бы быть хороший выбор.

1
ответ дан Michael Bobick 28 November 2019 в 00:49
поделиться

Вы могли также снова использовать SwingConstants. {ЛЕВЫЙ, ПРАВИЛЬНЫЙ}. Они не перечисления, но они действительно уже существуют и используются во многих местах.

1
ответ дан Tom 28 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: