为什么System.lineSeparator()被弃用了?

3
这是我的IntelliJ IDE截图,因为我无法直接上传图片(顺便说一下,我使用的是JDK 10)由于某些原因,我需要根据输入输出一个字符串,并且字符串中可能包含换行符。为了使程序在不同平台上运行,我使用一个变量存储System.lineSeparator(),并在需要时插入它。但是,我发现IntelliJ显示这个函数已经过时了。所以我的问题是,为什么这个函数被弃用了?使用换行符是不好的实践吗?有没有更好的方法来做到这一点?
final String NEW_LINE = System.lineSeparator();
String output = "Line one" + NEW_LINE + "Line two";
WriteToFile(output);

更新:图片展示了我在IntelliJ IDE中的警告。问题可能是由于我的配置引起的。根据下面的回答(顺便感谢大家的回答),也许我下次应该先问“它是不是”而不是“为什么”。

我在Java 9 API中没有看到它被弃用,我的Eclipse也是如此。弃用是否有某种消息? - Piro
System.lineSeparator()在Java 7中被添加,并且一直到目前的Java 10版本中都没有被弃用。 - Ben
1
可能与IDE有关?我在VSCode中使用Java插件,它没有显示任何警告。 - Hai Hoang
也许是因为它等同于System.getProperty("line.separator")?这种方式是否更好? - Gudra
1
在7、8、9和10上它并没有被弃用,所以指向哪个文档并不是很重要——它们都说的完全一样。 - Ben
显示剩余2条评论
4个回答

6
这个函数为什么被弃用了?
这是由插件、附加组件或您的IntelliJ配置设置实现的选择(正如一些评论所指出的,他们的IntelliJ并没有将其标记为弃用)。据我所见,弃用此函数的唯一选择可能是它可能会带来兼容性错误。然而,从Java System类文档的lineSeparator中可以看出: lineSeparator public static String lineSeparator() 返回系统相关的行分隔符字符串。它总是返回相同的值——system property line.separator的初始值。 在UNIX系统上,它返回“\n”;在Microsoft Windows系统上,它返回“\r\n”。

就目前而言(从Java 7版本开始实现到最新版本Java 10),并没有关于System.lineSeparator()被弃用的迹象。如果您确实很在意这个问题,可以直接向社区提问


使用换行符是一种不良实践吗?

完全不是(就我所知,可能有误),尤其是当您使用与运行代码的任何系统兼容的换行符时(理论上)。


如何更好地处理这个问题?

关于这段代码的设计选择,我没有更好的建议。看起来 Michal Lonski有一个关于这一点的建议。


1

可能是由于错误配置,System.lineSeparator() 被注释为 @Deprecated。您可以将文本光标定位在方法调用处,按下 Alt+Enter 并调用 Deannotate @java.lang.Deprecated 来删除注释。

The Deannoate @java.lang.Deprecated intention


0
你可以使用 String.format%n:
String output = String.format("Line one%nLine two");

%n 是一个与平台无关的换行符。


这个回答如何回答以下问题:“为什么这个函数被弃用?使用行分隔符是不好的实践吗?有更好的做法吗?” - Ben
这是关于“如何更好地完成这个任务”的部分。 - Michal Lonski
1
我不认为使用String.format是更好的方法。你会失去静态类型安全性,性能方面也会自毁长城,可读性也不够好。 - Ben

0

如果您的Java版本不支持System.lineSeparator(),您可以使用System.getPropertyline.separator

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接