JJ v interfacu HasValue je metoda getValue a zkušebně tam mám i metodu getLabel:
public interface HasValue {
public Integer getValue();
public String getLabel();
}
Jak říkám, teoreticky s tím problém nemám - jen si to musím oiterovat
sám pomocí JSTL + JSP EL. Jen mě zarazilo, že vyhořel ten tag stripsů
a zajímalo mě proč. Kód, který provádí tu reflexi samozřejmě pod
kontrolou nemám, takže nějaké další opracování (setAccessible nebo
iterace přes předky) nepřichází v úvahu.
Každopádně díky všem za názory - už v tom mám jasněji.
Honza N.
2007/11/26, Josef Cacek <[EMAIL PROTECTED]>:
> Ahojte,
>
> On Nov 26, 2007 4:15 PM, Podlesak Kamil <[EMAIL PROTECTED]> wrote:
>
> > > abstraktni metody fungovat nemusi. Problem je v tom, ze jednotlive
> > > prvky jsou v enumu reprezentovany anonymnimi tridami - tzn. maji
> > > nastaveny default access (package protected).
> >
> > Jiste, to je to co jsem psal (resp. minil).
> > A prave proto jsem navrhoval verejne abstaktni metody (public abstract)
> > primo v samotnem enumu (tj. ve verejnem predkovi tech anonymnich metod). Ty
> > pak samozrejme lze volat odkudkoliv, protoze deklarace je verejna (public)
> > ve verejne tride (public). Minimalne to nevadi kompilatoru, s reflexi jsem
> > si, priznavam, moc nehral.
>
> No prave, ona tam vadi ta reflexe (i v pripade, ze u predka jsou
> abstraktni metody public), protoze nastroje jako beanutils volaji
> nejakou variaci kodu, ktery jsem tu uvedl.
>
> > > instance.getClass().getMethod("getNeco",null).invoke(instance,null);
>
> Otazkou je, proc tam nepouziji to setAccessible().
>
> Abstrakce v nasem prikladu neni nutna, protoze predpokladam, ze v
> interfecu HasValue, ktery to implementovalo, bude uvedena metoda
> getValue().
>
> Z tohoto pohledu funguje bezproblemove konstrukce:
> HasValue.class.getMethod("getValue", null).invoke(instance, null);
>
> V tomto pripade uz se mi ale nevyplati pouzivat reflexi a tu metodu
> bych mel volat primo.
> ((HasValue) instance).getValue();
>
> Nejkorektnejsi by asi bylo podivat se na Classu predka, jestli vraci
> isAccessible() == true a v tom pripade ho pouzit pri volani invoke:
>
> instance.getClass().getEnclosingClass().getMethod("getValue",
> null).invoke(instance, null);
>
> > Kamil Podlesak
>
> -- pepa cacek
>
--
--------------------------------------------------------------
Ing. Jan Novotný
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
http://blog.novoj.net
Myšlenky dne otce Fura
--------------------------------------------------------------