Java GWT平台无关换行符

Java GWT平台无关换行符,java,javascript,gwt,Java,Javascript,Gwt,在我的一个java类中,我想编写一个如下所示的结果: String LINE_SEPARATOR = System.lineSeparator(); Stringbuilder result = new Stringbuilder(); result.append("some characters"); result.append(LINE_SEPARATOR); 使用此代码的类被传递到基于GWT的前端。GWT将GWT使用的所有java类(例如前面的所有类)编译成javascript。但是,G

在我的一个java类中,我想编写一个如下所示的结果:

String LINE_SEPARATOR = System.lineSeparator();
Stringbuilder result = new Stringbuilder();
result.append("some characters");
result.append(LINE_SEPARATOR);
使用此代码的类被传递到基于GWT的前端。GWT将GWT使用的所有java类(例如前面的所有类)编译成javascript。但是,GWT无法编译System.lineSeparator(),因为javascript中没有等效的方法

String LINE_SEPARATOR = System.getProperty(line.separator);

也会导致GWT编译器异常。但是,

String LINE_SEPARATOR = "\r\n";
可以工作,但不是独立于平台的


如何获得与GWT兼容的独立于平台的换行符?

一个简单的解决方案是:

String systemLineSeparator;
String platform = Window.Navigator.getPlatform();
if(platform.toLowerCase().contains("windows")) {
    systemLineSeparator = "\r\n";
}
else {
    systemLineSeparator = "\n";
}

一个更高级的解决方案可以使用延迟绑定。

最简单的事情可能是可行的(在我的脑海中):

String LINE_SEPARATOR=GWT.isClient()?“\n”:getLineSeparator();
@GwtIncompatible
私有静态字符串getLineSeparator(){
返回系统.lineSeparator();
}
这需要一个最新版本的GWT(至少2.6,可能是2.7)

另一种方法是将超级源代码与简单的提供程序类一起使用:

公共类LineSeparator提供程序{
公共最终字符串行_SEPARATOR=System.lineSeparator();
}
//超级资源
公共类LineSeparator提供程序{
公共最终字符串行_分隔符=“\n”;
}
请注意,在GWT的未来版本中,
System.getProperty
将起作用(对于某些属性),因此您可以将其用于
line.separator

,您可以在任何地方使用
\n
,只有在确实需要使用
\r\n
时,才可以使用
替换(“\n”,“\r\n”)


(如果你问我,我会在任何地方使用
\n
,甚至在Windows上也一样)

为什么不使用

标记呢?结果字符串也在html环境之外使用,例如,记录结果并将其写入文件。Window.Navigator.getPlatform()可以与GWT一起使用。当我在本机Java中执行代码时,出现了一个不满意的LinkError。您可以在应用程序引导期间设置lineSeparator变量。在服务器上使用System.lineSeparator()。在client Window.Navigator.com上,我发现行分隔符字符串必须在客户端代码中确定,然后传递给共享/服务器代码。我使用此解决方案作为的基础。如果getLineSeparator()具有@GwtIncompatible标记,则该方法不会在javascript中编译,GWT会抛出一个method not found异常。因为该方法是在if语句中调用的,并且找不到任何源代码。超级源代码的想法似乎有点过分,所以我现在将坚持使用“\n”解决方案。
String systemLineSeparator;
String platform = Window.Navigator.getPlatform();
if(platform.toLowerCase().contains("windows")) {
    systemLineSeparator = "\r\n";
}
else {
    systemLineSeparator = "\n";
}