そう。私はAndroidでいくつかのネットワークをやろうとしています。私の非同期タスク内で、私はやっています:
InputStream streamOfDestiny = null;
try{
// do some network stuff here...
}
finally{
if(streamOfDestiny != null){
streamOfDestiny.close(); // Build error here. Apparently, closing a stream can cause an IOException. Why this is the case, I do not know. But it is. And, since this is Java, I apparently need to care.
}
}
だから今、私はすべてを汚すこの IOException を手に入れました。私はこのようなことができます:
InputStream streamOfDestiny = null;
try{
// do some network stuff here...
}
finally{
if(streamOfDestiny != null){
try{
streamOfDestiny.close();
}
catch(IOException e){
// Hey look! I'm inside a catch block, inside a finally block!
}
}
}
しかし、それはひどいように見えます。finally ブロック内の try/catch ブロック? なんて醜い!閉じないままにしておくこともできますが、それは私には悪い習慣のように思えますし、間違っていると感じています (私はストリームを開始しましたが、終了したいと思っています)。私はこれを行うことができます:
IOUtils.closeQuietly(streamOfDestiny);
しかし、今は org.apache.commons.io.IOUtils を見つけて、どうにかしてパッケージに含める必要があります。あまりにも多くの作業に加えて、必要な機能が 1 つだけのパッケージ サイズが大きくなります。ラメ。
私はいつでも自分のバージョンの closeQuietly を書くことができました:
public static void closeStreamQuietly(InputStream streamToClose){
try{
streamToClose.close();
}
catch (IOException e){
// ignore it....
}
}
しかし、それは私が車輪を再発明しているように思えます。これはほとんどの場合悪いニュースです.これを行うには、ここで完全に欠けている素敵でエレガントな方法があるはずです.
アイデアはありますか?