格式化 try-with-resources 的代码约定是啥? [关闭]

Posted

技术标签:

【中文标题】格式化 try-with-resources 的代码约定是啥? [关闭]【英文标题】:What is the code convention for formatting try-with-resources? [closed]格式化 try-with-resources 的代码约定是什么? [关闭] 【发布时间】:2015-06-10 10:41:59 【问题描述】:

我想知道使用资源格式化 try 块的代码约定是什么,尤其是使用多个资源时。目前我将每个资源放在自己的行上,以分号结尾,并使用 vim 的缩进级别(2 个制表符),如下所示:

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

我还看到人们使用分号作为分隔符而不是终止符,并且只在每个资源之间使用换行符,如下所示:

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

什么是约定?

【问题讨论】:

惯例是您的公司/组织告诉您的,通常... 我认为约定实际上并没有那么远,所以无论你应该做什么与​​预先存在的代码一致。如果您没有任何预先存在的代码,请选择您觉得更好的代码。 但不要忘记可读性。 无论您决定使用哪种约定,您都应该保持一致。但是,如果在孤立的用例中可读性与约定冲突,则选择可读性。 我肯定会在第二个选项中将in2 的缩进增加一个。当事情几乎(但不完全)排成一行时,我不喜欢它。 【参考方案1】:

美学没有“对”或“错”之分;每个组织最终都采用自己的编码风格。但是,经常会借鉴知名项目或组织的编码风格。

最常用的 Java 代码库之一是 JDK 本身。经过几次 grep,我在 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 中可能还有其他示例,但总的来说,这些人对坚持他们的指导方针是认真的,所以我怀疑他们会有所不同。

【讨论】:

左大括号应该与 JarInputStream 在同一行...参见例如Files.readAllBytes 谢谢,好点。似乎他们用; 和换行符分隔资源,并对齐它们。最后,他们将左括号保持在自己的行上。后者在我看来有点不寻常。

以上是关于格式化 try-with-resources 的代码约定是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Try-with-resource'必须是变量声明'[重复]

在 Netbeans 中使用 try-with-resources

使用try-with-resource优雅关闭资源

try-with-resources:Java 是不是对 .close() 的调用顺序做出任何保证?

try-with-resources 失败但尝试有效

为啥 try-with-resources 不能与字段变量一起使用?