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

Reply via email to