Как мы можем протестировать Enum как valueOf ()?

1

G'day, errata... Мой план был таким, как показано ниже. Это обновление должно разъяснить и извиниться за поздний ночной вопрос. Ошибка компиляции была вызвана проблемой в другом месте файла.

Уточнение: простое перечисление Java, например:

public enum ServiceSource
{
    NONE,
    URL,
    FILE;

}

Хотите проверить, isURL():

 public boolean isURL(){

    return (URL == this);
}

Это работает (и компилируется)... Нет никаких вопросов - Правильно ответил: dasblinkenlight и Elliott Frisch. Спасибо вам большое за ваше время.

смотрите также:

  • 0
    Какую именно ошибку компилятора вы получите?
  • 0
    Пожалуйста, также посмотрите stackoverflow.com/questions/604424/java-convert-string-to-enum для часто предпочитаемого ответа.
Теги:
enums

4 ответа

5
Лучший ответ

Так как это метод экземпляра, вам нужно проверить, что this равно URL, например:

public boolean isURL(){
    return (URL == this);
}

Демо на идеон.

2

Если вы хотите иметь методы, которые являются полиморфными, то есть демонстрируют различное поведение для разных экземпляров (значений) вашего класса enum, я предпочитаю переопределить общий метод:

public enum ServiceSource {

    NONE("no_value"),
    URL("url"){

        @Override
        public boolean isURL() {
            return true;
        }

    },
    FILE("file");

    private final String val;

    private ServiceSource(String val) {
        this.val = val;
    }

    public boolean isURL() {
        return false;
    }
}

Но для методов, которые проверяют, является ли это конкретным значением enum добавление метода isXXX для каждой константы кажется очень расточительным. На самом деле, сама причина использования enum - это то, что вы можете написать

if(thing == ServiceSource.URL) 

В другом месте вашего кода.

1

Если я понимаю ваш вопрос, правильный метод в вашем перечислении - использовать this так,

public enum ServiceSource
{
  NONE(   "no_value"  ),
  URL(    "url"       ),
  FILE(   "file"      );
  ServiceSource(String v) {
    text =v;
  }
  private String text;
  public boolean isURL() {
    return this == URL;
  }
}
0

Вы можете сделать метод в своем Enum, чтобы проверить его значение следующим образом:

  public boolean isURL(){
    return (URL == this);
  }

Но трудно понять значение этого подхода, поскольку каждый объект имеет встроенный метод equals(), который выполняет одно и то же.

if (serviceSource.equals(ServiceSource.URL)) { ... }

Это был бы более общий и очевидный способ проверить присвоенное значение переменной Enum (или любой переменной, если на то пошло). При первом подходе вам понадобится новый метод isX() для вашего Enum; каждый раз, когда вы добавляете константу Enum, вам, вероятно, понадобится новый метод для сопровождения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню