gpt4 book ai didi

java - 我可以对已创建的 InputStream 使用 try-with-resources 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:15:32 25 4
gpt4 key购买 nike

像这样:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com