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

Odpovedet emailem