在我当前的项目中,我们总是在java源文件的末尾插入空的新行。我们还使用CheckStyle(具有错误级别)强制执行此操作。
我很长一段时间都在寻找这个话题,但不幸的是我找不到任何令人信服的理由。似乎其他开发人员对此非常漠不关心,因为他们只是在eclipse格式化程序中选中了一个复选框,并且它是自动完成的。但我仍然不知道为什么需要它,为什么它可能很重要。所以我的问题是:
为什么Java源文件末尾的空行需要? 它是当前的需求还是过去的遗留物,在目前的代码库中是不可取的?
答案 0 :(得分:30)
答案 1 :(得分:23)
这是在最后有额外换行的一个很好的理由:
如果你有一个没有换行符的文件,下次编辑文件添加另一行时,大多数合并工具都会认为现有的行已经改变了(我90%肯定SVN也这样做了)
在下面的示例中,包含“编辑前的最后一行”的行没有换行符。如果我们尝试添加新行“编辑后的最后一行”,我们可以看到第5行和第6行都标记为已更改,但两个版本中第5行的实际内容相同。
如果每个人都在关注您的项目主管建议,那么这就是结果(只有第6行与原始文件不同)。这也避免了合并期间的误解。
虽然这可能看起来不是什么大不了的,但是假设一个开发人员(A)实际意图改变最后一行的内容而另一个开发人员(B)添加了一个新行。如果在EOF之前没有使用换行符,则会出现合并冲突,因为开发人员B也被迫编辑前一行以添加换行符。并且...谁喜欢CVS / SVN冲突?
答案 2 :(得分:7)
Ralph Rickenbach无耻地偷走了答案:
如果是最后一个,许多旧工具行为不端 文本文件中的数据行不是 以换行符或运输终止 返回/新行组合。他们 在终止时忽略该行 用^ Z(eof)代替。
所以我觉得它主要是过去的幽灵。不幸的是,如果你没有正确地驱除它们,这些幽灵会咬你的尾巴。 (您的构建服务器是旧的,并使用较旧的shell脚本进行摘要等)。
答案 3 :(得分:2)
尝试剪切/粘贴整个文件。 checkstyle或eclipse中的一些错误:)
答案 4 :(得分:1)
有时您的编译器无法正确解析它:
Error: Reached end of file while parsing
答案 5 :(得分:1)
除了已经提到的有效尾随换行字符的正当理由(旧工具和差异可能存在问题)之外,还有另一种方法来看待它:
为什么特殊情况下不的最后一行在文件中的每隔一行时附加一个换行符?
答案 6 :(得分:0)
这只是一种编码风格。不伤害或帮助任何事情。我不会让它打扰你听起来这是你的团队偏好包括和空行。除了为什么有人足够关心将它添加到checkstyle之外,对它没有什么好的论据?
答案 7 :(得分:0)
我从未听说过这样的要求。
事实上,我刚刚确认,当文件末尾没有空行时,Java程序将在没有任何编译器/运行时错误或警告的情况下运行。
正如一些评论者所说,这必须是编码风格问题。不幸的是,我无法建议为什么在Java文件的末尾有一个空行可能很重要。事实上,对我来说似乎毫无意义
答案 8 :(得分:0)
我们必须为某些C ++代码执行此操作,因为编译器会对其生成警告,并且我们有“无错误或警告”策略。 也许这个问题存在于其他地方......你有一个难以理解的工具是乱七八糟的还是一个无法处理它的合并工具?
这真的不是什么大事。