Я никогда раньше не использовал классы перечисления Java для постоянных значений, я обычно использовал подход «общедоступный финал» в в прошлом. Я начал использовать перечисление сейчас, и я переопределяю метод toString (), чтобы возвращать значение, отличное от имени перечисления.
У меня есть некоторый код JPA, в котором я создаю TypedQuery с именованными параметрами , одно из которых является строковым представлением значения перечисления. Если я просто задаю параметр с помощью Status.ACTIVE, я получаю правильное значение «A», но возникает исключение, потому что его тип на самом деле является Status, а не String. Это только работает, если я явно вызываю метод toString (). Я думал, что простое переопределение метода toString () приведет к возврату типа String, независимо от типа класса.
Это перечисление:
public enum Status {
ACTIVE ("A"),
PENDING ("P"),
FINISHED ("F");
private final String value;
Status(String value) {
this.value = value;
}
public String toString() {
return value;
}
};
Это это TypedQuery:
TypedQuery<MechanicTimeEvent> query = entityManager().createQuery("SELECT o FROM MechanicTimeEvent o WHERE o.id.mechanicNumber = :mechanicNumber AND o.id.status = :status", MechanicTimeEvent.class);
query.setParameter("mechanicNumber", mechanicNumber);
query.setParameter("status", Status.ACTIVE.toString());