2015-07-19 90 views
0

GWT中可能在客戶端和服務器上有不同的函數實現嗎?例如,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運行時模擬的方式。

+0

'@ GwtIncompatible'不起作用:如果我換'String.format'爲'@GwtIncompatible formatWrapper()',GWT編譯器只是不看'formatWrapper'方法,因而仍抱怨它'toFixed '。 – stepancheg

+0

超級來源應該可以工作。 – stepancheg