2015-07-19 2 views
0

Возможно ли, чтобы в GWT была реализована другая функция на клиенте и на сервере? E. g.GWT: компиляция состояния клиента/сервера

private static native String toFixedNative(int digits, double value) /*-{ 
    return value.toFixed(digits); 
}-*/; 

public static String toFixed(int digits, double value) { 
    if (GWT.isClient()) { 
     return toFixedNative(digits, value); 
    } else { 
     String format = "%." + digits + "f"; 
     return String.format(Locale.US, format, value); 
    } 
} 

Это не работает в настоящее время, GWT компилятор жалуется, что String.format функция не доступна в GWT. Но это действительно не нужно, потому что String.format вызывается только тогда, когда !GWT.isClient().

Есть ли способ сказать компилятору GWT игнорировать часть функции?

ответ

1

С последней версией GWT (2.7, может быть также 2,6), это должно быть возможно сделать это путем перемещения String.format в метод, который вы затем пояснение @GwtIncompatible (любые аннотации с этим именем будет работать, пакет Безразлично» неважно).

В любой версии GWT можно также получить суперисточник класс: предоставить две версии класса для клиентских и неклиентских случаев. См. «Переопределение реализации одного пакета с другим» в http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml
В GWT вы найдете множество примеров; это также то, как эмулируется Java Runtime.

+0

'@ GwtIncompatible' не работает: если я завершаю' String.format' как '@GwtIncompatible formatWrapper()', компилятор GWT просто не видит 'formatWrapper' метод и, следовательно, все еще жалуется на него в' toFixed '. – stepancheg

+0

супер источник должен работать. – stepancheg

Смежные вопросы