9 дек. 2015 г.

GWT простил NPE

Сегодня разбирался с интересной ошибкой. Во время отладки GWT кода словил NullPointerException, хотя на всех комплексах и на бою данной ошибки не наблюдалось. Проблемы были в этом участке кода:
if (someEnum.equals(SomeEnum.SOME_VALUE)) {
    a = "Hello world";
}
По некоторым причинам someEnum вдруг оказался null, что приводило к NPE. Сразу появилась мысль, что gwt позволяет компилировать equals для enum в знак равенства. Собственно, так и оказалось, но чтобы убедиться в этом пришлось сделать отладочную detailed-compiled сборку, покопаться в javaScript и найти тот самый участок кода:
someEnum == (ru_package_SomeEnum_$clinit__V() ,ru_package_SomeEnum_SOME_1VALUE) 
&& 
(a = $intern_12224);
Видно, что этот код уже позволяет значение null. Заодно узнал об операторе запятая, которого нет в java, но есть в javaScript.

Ну а по-хорошему, в gwt коде правильнее было бы написать так:  
if (SomeEnum.SOME_VALUE.equals(someEnum)) {
    a = "Hello world";
}

Комментариев нет :

Отправить комментарий