就像这样:
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
看起来它能工作。但是它安全吗?
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
看起来它能工作。但是它安全吗?
看起来它能工作
如果在in
之前添加InputStream
(或一些InputStream
的超类型),它就可以工作: 语言规格要求你必须为每个资源声明一个变量。
try (InputStream in = fileIn) { ... }
或者在Java 9+中直接引用fileIn
:
try (fileIn) { ... }
它能够正常工作,没有理由不这样做:使用变量声明形式,您将表达式赋值给变量(一个新类,方法调用的结果,数组元素等)。资源无法确定它是否正在获取“新”实例:它只是一个具有正确类型值的东西。
它安全吗?
取决于你所指的“安全”的确切含义。
在这段代码中,它肯定是安全的,因为它可以正常运行,并且 in.close()
将在块结束时被调用。
但是,它违反了一个经验法则:“如果您没有打开流,请勿关闭它”。因此,在其他部分程序期望调用该方法后流仍然保持打开状态时,它可能会导致意外故障,从而可能是不安全的。
try(InputStream in = fileIn)
。 - malmyMethod
“拥有”这个流,那么在这里关闭它是可以的。 - Andy Turner