Ing. Jan Novotný napsal(a):
> Zdravím konferenci,
>
> dokážete někdo vysvětlit proč při přístupu k metodám Java enum
> typu, který mám definován takto:
>
> public enum QueryStatus implements HasValue {
> INSERTED {
> public Integer getValue() { return 0; }
> public String getLabel() { return "vloženo"; }
> },
> ALLOWED {
> public Integer getValue() { return 1; }
> public String getLabel() { return "schváleno"; }
> },
> FORBIDDEN {
> public Integer getValue() { return 2; }
> public String getLabel() { return "zamítnuto"; }
> }
> }
>
> vyhazuje java IllegalAccessException? Podaří se mi získat i object
> Method pro danou getter metodu, ale když se zavolá metoda invoke,
> vyletí vyjímka IllegalAccessException. Nějak se mi nepodařilo nic
> vygůglit, tak si nedokážu vysvětlit, kde je problém.
>
> Honza N.
>
>
Co třeba to napsat takto?
public enum QueryStatus implements HasValue {
INSERTED(0, "vlozeno"),
ALLOWED(1, "schvaleno"),
FORBIDDEN(2, "zamitnuto");
private Integer value;
private String label;
private QueryStatus(Integer value, String label) {
this.value = value;
this.label = label;
}
public Integer getValue() {
return value;
}
public String getLabel() {
return label;
}
public static QueryStatus findQueryStatusByValue(Integer value) {
if (value == null) {
return QueryStatus.FORBIDDEN;
}
for (QueryStatus qs : QueryStatus.values()) {
if (qs.equals(value)) {
return qs;
}
}
return QueryStatus.FORBIDDEN;
}
}
Dokonce je možné napsat statickou metodu, která podle zadaného parametru
value vrátí přímo výčtový typ.
viz. metoda
public static QueryStatus findQueryStatusByValue(Integer value);
Fafi