try-with-resources and null resource (original) (raw)
Rémi Forax forax at univ-mlv.fr
Fri Jan 28 02:03:37 PST 2011
- Previous message: try-with-resources and null resource
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Le 28/01/2011 10:30, Florian Weimer a écrit :
[...]
By the way, has anybody else seen this phenomenon in their code base?
InputStream in = null; try { in = new FileInputStream(path); useFile(in); } finally { if (in != null) { in.close(); } } I'm wondering where this is coming from.
You mean, instead of:
InputStream in = new FileInputStream(path); try { useFile(in); } finally { in.close(); }
This code is very common. I've spied my students to understand why. It's because FileInputStream throws an exception so you put it in the try block, after all try/finally is like try/catch. Then the IDE warn you that 'in' is not accessible in the finally block. So you put the declaration on top of the block.
InputStream in; try { in = new FileInputStream(path); useFile(in); } finally { in.close(); }
Here the IDE says that 'in' is not initialized if new FileInputStream throws an exception. So you initialize 'in' to null. And the IDE warn you because in.close() will throw a NPE. So you add a null check.
It's the IDE's fault because it should not suggest to initialize 'in' with null and developer's fault because he blindly follows what the IDE says.
Rémi
- Previous message: try-with-resources and null resource
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]