¿Puedo utilizar Try-con-recursos con un InputStream que ya ha sido creado?

bot_bot:

Me gusta esto:

public void myMethod(InputStream fileIn){
    try (InputStream in = fileIn)  {
        do stuff....
    }
}

Parece funcionar. ¿Es seguro?

Andy Turner:

Parece funcionar

Lo hará si se agrega InputStream(o algún subtipo de él InputStream) antes in: la especificación de lenguaje requiere que sea para declarar una variable para cada recurso.

try (InputStream in = fileIn) { ... }

o simplemente se refieren directamente a fileIn, en Java 9+:

try (fileIn) { ... }

Y no hay razón para que no debería funcionar: con el formulario de declaración de variables, va a asignar una expresión a la variable (una nueva clase, el resultado de una llamada a un método, un elemento de matriz, etc.). El recurso no puede ver si está recibiendo una "nueva" instancia o no: es sólo una cosa con un valor del tipo correcto.

¿es seguro?

Depende de qué es exactamente lo que quiere decir con "seguro".

Sin duda, es segura en el sentido de que funcionará sin error en el código, y in.close()se invocará al final del bloque.

Sin embargo, se viola la regla de que "si no se abre una corriente, no lo hacen cerca de ella". Como tal, podría no ser seguro en el sentido de que provoca fallos inesperados en otras partes del programa que esperan que la corriente sigue siendo abierta después de invocar el método.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=183220&siteId=1
Recomendado
Clasificación