2009-08-11 136 views
1

我正在使用GWT 1.5和GWT 1.7應用程序的相同源代碼。GWT條件編譯

我想知道有沒有一種方法來有條件地編譯一個或另一個版本的Java代碼的部分。

我知道有一種方法可以爲模塊XML文件中的小部件和瀏覽器執行此操作。

+0

我不這麼認爲。你爲什麼要編譯兩個GWT源代碼?我們從1.5到1.7沒有問題。 – 2009-08-11 13:35:40

+1

我們做到了。但是在一種情況下,舊的(1.5)和新的(1.7)編譯的代碼行爲不一樣。它是Java和原生插入腳本的組合。將舊的(1.5)代碼移動到新的接口中去除所有不贊成使用的調用目前有很多工作要做。 – Drejc 2009-08-12 07:26:03

回答

1

解決方案非常簡單。

String version = GWT.getVersion(); 
if (version.startsWith("1.5")) 
{ 
    // do something the 1.5.* way 
} 
0

如果你真的想這樣做,我想方法是使用一個發電機。

有了一個發電機,你可以有延遲綁定(有點窮人的內省)。

要訪問1.5或1.7代碼,您必須在接口中定義通用API,並使用GWT.create獲取具體實現。

0

如果(version.startsWith( 「1.5」)){ // 做一下1.5。*的方式 }

是竟是那樣的壞主意。理想情況下,您應該在這裏使用絕對字符串值,因爲GWT編譯器將評估相等性並在編譯輸出的if條件內修剪不可達代碼。使用.startsWith意味着所有的代碼將在最終的應用程序中結束。

不幸的是,GWT版本不是編譯時的屬性。也許最好的方法是創建一個空的Generator實現,它只是從模塊中的「ClassName」調用中返回「ClassName15」或「ClassName17」。然後,您可以在編譯時從生成器調用About.version(),並在編譯時查找該版本。

+0

感謝您指出,但這是我找到的唯一解決方案。它只適用於一小段代碼片段。所以這個解決方案對我來說工作得很好。 – Drejc 2009-08-29 20:06:36