我从来没有真正将Java枚举类用于常量值,过去我通常使用“public final”方法。我已经开始使用枚举了,并且我重写了toString()方法返回与枚举名称不同的值。
我有一些JPA代码,我在其中创建一个带有命名参数的TypedQuery,其中一个是枚举值的字符串表示形式。如果我只是使用Status.ACTIVE设置参数,我会得到正确的“A”值,但会抛出一个异常,因为它的类型实际上是Status而不是String。它只有在我显式调用toString()方法时才有效。我认为只要重写toString()方法就会导致返回的字符串类型,而不管类的类型是什么。
这是枚举:
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 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());