什么是格式化try-with-resources的代码规范?

3

我想了解在处理多个资源的情况下,try块与资源格式的编码规范是什么。目前,我将每个资源放在自己的一行上,以分号结尾,并使用vim的缩进级别(2个制表符),如下所示:

try (
        InputStream in1 = ...;
        InputStream in2 = ...;
    ) {
    ...;
}

我也见过有人将分号作为分隔符而不是终止符,并且在每个资源之间只使用换行符,例如以下方式:

try (InputStream in1 = ...;
    InputStream in2 = ...) {
    ...;
}

什么是约定俗成的规则?


7
会议的具体规定取决于你所在的公司/组织,通常... - JonK
我认为规范实际上并没有那么严格,所以你应该做与现有代码一致的事情。如果你没有任何现有的代码,那就选择你感觉更好的方式。 - Dragondraikk
但不要忘记可读性。 - cybersoft
更少的代码行意味着更多的屏幕行数 - 我会选择第二个选项,甚至尝试将其全部放在一行上,如果不太长的话。显然这完全是个人喜好... - assylias
1
我肯定会将第二个选项中 in2 的缩进增加一级。当事物几乎(但不完全)对齐时,我不喜欢这种情况。 - biziclop
显示剩余4条评论
1个回答

6
涉及美学时,不存在“正确”或“错误”的问题;每个组织最终都会形成自己的编码风格。然而,从知名项目或组织借鉴编码风格是很常见的。
最常用的 Java 代码库之一是 JDK 本身。在进行了一些 greps(文本搜索)后,我在 OpenJDK 8 的 java/lang/Package.java 中找到了一个多行示例:
/*
 * Returns the Manifest for the specified JAR file name.
 */
private static Manifest loadManifest(String fn) {
    try (FileInputStream fis = new FileInputStream(fn);
         JarInputStream jis = new JarInputStream(fis, false))
    {
        return jis.getManifest();
    } catch (IOException e) {
        return null;
    }
}

(JDK 中可能还有其他例子,但一般来说,这些人非常严格地遵循他们的准则,所以我怀疑他们会有所不同。)

5
开头的大括号应该和 JarInputStream 在同一行... 例如,参见 Files.readAllBytes - assylias
谢谢,说得好。看起来他们用 ; 和换行符分隔资源,并对齐它们。最后,他们将左括号保留在自己的一行上。后者对我来说有点不寻常。 - ReyCharles

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