像这样:
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
似乎可行。安全吗?
答案 0 :(得分:12)
似乎可行
如果您在InputStream
之前添加InputStream
(或in
的某些超类型),则将这样做:language spec requires您可以为每个资源声明一个变量。
try (InputStream in = fileIn) { ... }
或直接在Java 9+中直接引用fileIn
:
try (fileIn) { ... }
并且没有理由不起作用:使用变量声明形式,您可以为变量分配一个表达式(一个新类,一个方法调用的结果,一个数组元素等)。该资源无法看到它是否正在获取“新”实例:它只是具有正确类型值的东西。
安全吗?
取决于“安全”的确切含义。
从某种意义上讲,它在此代码中可以正常运行是绝对安全的,in.close()
将在代码块的末尾被调用。
但是,它违反了“如果不打开流,就不要关闭流”的经验法则。因此,从某种意义上讲,这可能是不安全的,因为它会导致程序的其他部分发生意外故障,这些故障期望流在调用该方法后仍然可以打开。