Vypadá to, že to hned tak neopraví :-(.
Can't fix this for AS 9. May need a spec change at the OMG level.
Aby toho nebylo málo, tak jsem zjistil, že porovnání pomocí switch case funguje.
Porovnání pomocí if (== nebo equals) nefunguje.
To je magie, co? ;-)
// kod
if(one1==TestEnum.ONE){
System.out.println("JSEM ve ONE - if");
}
switch(one1){
case ONE:
System.out.println("JSEM ve ONE - switch");
System.out.println("one1.equals(TestEnum.ONE) ==
"+one1.equals(TestEnum.ONE));
System.out.println("one1.ordinal()==TestEnum.ONE.ordinal() ==
"+(one1.ordinal()==TestEnum.ONE.ordinal()));
break;
}
// vystup
JSEM ve ONE - switch
one1.equals(TestEnum.ONE) == false
one1.ordinal()==TestEnum.ONE.ordinal() == true
Závěr:
Pokud potřebujete přes RMI (EJB) používat výčtové typy, tak je porovnávejte buď
v switch case nebo pomocí ordinal().
Fafi
Ondřej Fafejta KYBERIE wrote:
> Zapomněl jsem uvést, že to zkouším na glassfish.
> Vypadá to na chybu v glassfish.
>
> https://glassfish.dev.java.net/issues/show_bug.cgi?id=193
>
> Fafi
>
> Ondřej Fafejta KYBERIE wrote:
>
>> Zdravím konferenci!
>>
>> Přišel jsem na neočekávané chování výčtových typů.
>>
>> Pokud získáte výčtový typ přes remote stateless bean, tak nefunguje equals.
>> Setkal jste se s tím někdo?
>> Nedělám něco špatně?
>>
>> /**
>> * Testovaci zdrojove kody
>> */
>> // soubor TestEnum.java
>> public enum TestEnum {
>> ONE,TWO;
>> }
>>
>> // Stateless bean (implementace) vraci toto:
>> public TestEnum getTestEnum(){
>> return TestEnum.ONE;
>> }
>>
>> // Testovani
>> TestEnum one=TestEnum.ONE;
>> TestEnum one1=instance.getTestEnum(); // instance je instance Stateless
>> beanu pres lookup
>>
>> System.out.println("one xxx one1 == "+one+" xxx "+one1);
>> System.out.println("one.equals(one1) == "+one.equals(one1));
>>
>> // vystup -- POROVNANI DVOU STEJNYCH VYCTOVYCH TYPU je FALSE
>> one xxx one1 == ONE xxx ONE
>> one.equals(one1) == false
>>
>>
>> Fafi
>>