Переопределение перечисления Java toString ()

Я никогда раньше не использовал классы перечисления 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());
5
задан user85421 13 October 2011 в 18:19
поделиться