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

Odpovedet emailem