A co se podivat do zdrojaku jak je to udelany ... Podlesak Kamil napsal(a): > Zajímavé, abstraktní metody musí fungovat... jak tu instanci Method získáváte? > getMethod() nebo getDeclaredMethod()? Důležité je, že se musí jednat o metodu > z předka, nikoliv z potomka (interní třídy). > > Kamil Podlešák > >> -----Original Message----- >> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >> Behalf Of Ing. Jan Novotný >> Sent: Monday, November 26, 2007 2:53 PM >> To: Java >> Subject: Re: IllegalAccessException pri pokusu prístupu na >> getter Enumu >> reflexí >> >> >> Díky za nakopnutí, tohle se trefilo do černého - alespoň co se týká >> zdůvodnění. Když jsem v debug režimu manuálně nastavil metodě >> setAccessible(true), už invoke() prošlo bez chyby a vrátilo to, co >> mělo. Bohužel doplnění abstraktní metody do QueryStatus nepomohlo a >> bez setAccessible(true) se k danému getteru nedostanu - pro úplnost >> uvádím aktualizovanou třídu: >> >> 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"; } >> }; >> >> public abstract String getLabel(); >> >> } >> >> Navíc jsem objevil, že Stripes mají tag <stripes:options-enumeration/> >> u kterého jsem si myslel, že bude natvrdo nastavováno setAccessible, >> ale není tomu tak - padá to na IllegalAccess také. >> >> Zkusím ještě popátrat na gůglu. >> >> Honza N. >> >> 2007/11/26, Podlesak Kamil <[EMAIL PROTECTED]>: >>> Myslim ze bude stacit doplnit deklaraci tech metod v >> samotne tride QueryStatus (jako abstraktni metody). >>>> 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"; } >>>> } >>> public abstract Integer getValue(); >>> public abstract String getLabel(); >>>> } >>> Jednotlive instance jsou neverejne tridy, tedy je normalne >> nelze pouzivat a nelze ani volat metody v nich deklarovane. >> Tato omezeni se za normalnich okolnosti kontroluji i pri >> pouzivani reflection, ale kontrolu lze vypnout zavolanim >> method.setAccessible(true). Nektere knihovny pouzivajicich >> reflection toto delaji, coz vysvetluje proc se v nich tento >> problem neobjevi (zatimco v jinych ano). >>> Kamil Podlesak >>> -- >>> [EMAIL PROTECTED] >>> >>> >>>> -----Original Message----- >>>> From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] >>> Behalf Of Ing. Jan Novotný >>> Sent: Monday, November 26, 2007 1:58 PM >>> To: Java >>> Subject: IllegalAccessException pri pokusu prístupu na getter Enumu >>> reflexí >>> >>> >>> 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. >>> >>> -- >>> -------------------------------------------------------------- >>> Ing. Jan Novotný >>> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ >>> http://blog.novoj.net >>> Myšlenky dne otce Fura >>> -------------------------------------------------------------- >>> > >
-- Jiří Mareš (mailto:[EMAIL PROTECTED]) ČSAD SVT Praha, s.r.o. (http://www.svt.cz) Czech Republic
