像这样:
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
这似乎有效。安全吗?
最佳答案
It seems to work
如果您在 in
之前添加 InputStream
(或 InputStream
的某些父类(super class)型),它就会执行:language spec requires您要么为每个资源声明一个变量。
try (InputStream in = fileIn) { ... }
或者在 Java 9+ 中直接引用 fileIn
:
try (fileIn) { ... }
没有理由说它不能工作:使用变量声明形式,您正在为变量(一个新类、方法调用的结果、数组元素等)分配一个表达式。资源看不到它是否正在获取"new"实例:它只是具有正确类型值的东西。
is it safe?
取决于您所说的“安全”的确切含义。
它肯定是安全的,因为它将在此代码中正常工作,并且 in.close()
将在 block 的末尾被调用。
但是,它违反了“如果您没有打开流,就不要关闭它”的经验法则。因此,从某种意义上说,它可能是不安全的,因为它会导致程序的其他部分发生意外故障,这些部分期望流在调用该方法后仍处于打开状态。
关于java - 我可以对已创建的 InputStream 使用 try-with-resources 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392971/