GWT:客户端/服务器条件编译

时间:2015-07-19 14:36:15

标签: gwt client-server

在GWT中是否可以在客户端和服务器上使用不同的函数实现? E. g。

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 个答案:

答案 0 :(得分:1)

使用GWT的最新版本(2.7,也许还有2.6),应该可以通过将String.format移动到随后使用@GwtIncompatible注释的方法(使用该注释的任何注释)来实现。名称可行,包不重要。

在任何版本的GWT中,它也可以超级源一个类:为客户端和非客户端案例提供两个版本的类。请参阅http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml中的“覆盖一个包实现与另一个包” 你会在GWT中发现很多例子;这也是Java Runtime的模拟方式。