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