Пол enum с женщиной, мужчиной - PullRequest
0 голосов
/ 16 февраля 2020

Итак, когда мы используем класс с методом main, как мы можем go узнать об этом в этом случае?

Например:

System.out.print("Enter a name: ");
String name = sc.next();

Но вопрос о том, имеет ли пол введите Gender, как бы мы применили его тогда в той же ситуации со сканером?

Будет ли это начинаться примерно так:

Gender gender = sc.

Вопрос в том, что будет после s c.

Так же как, скажем, мы создали объект

Employee employee = new Employee (gender);

А потом пол в скобках подчеркнут красным, поскольку я не могу понять, как применить тип Пол в сканере после s c .

1 Ответ

1 голос
/ 16 февраля 2020

Использование Gender.valueOf(sc.next())

Поскольку Gender является enum, метод static Gender valueOf(String) создается автоматически.

Вы просто используете его следующим образом:

String femaleString = "FEMALE";
Gender femaleGender = Gender.valueOf(femaleString);

String maleString = "MALE";
Gender maleGender = Gender.valueOf(maleString);

Конечно, вы можете уточнить ваш ввод и разрешить ввод строчных букв и / или просто M или F. Таким образом, вы можете захотеть такой конвертер:

enum Gender {
  FEMALE, MALE;

  public static Gender fromString(String str) {
    String normalized = str.toUpperCase();
    return Arrays.stream(Gender.values())
      .filter(g -> g.name().startsWith(normalized))
      .findFirst()
      .orThrow(() -> new IllegalArgumentException("No gender starting with " + str));
  }
}

И тогда использование становится:

Gender gender = Gender.fromString(sc.next());
...