1

AutoCloseableインターフェイスの定義により、すべてのインスタンス
呼び出す必要があります。 つまり、このように書かなければなりません。 close()

try(A a = new A()){
    //do something
}

java.sound.sampled.SourceDataLineインターフェイス、
またはより一般的にはインターフェイスjava.sound.sampled.Lineで、すべてのインスタンス
呼び出す必要がありますか、 それとも呼び出した後にのみ呼び出す必要がありますか? close()
close() open()

close公式ドキュメントに の場合のみと明記されている場合はisOpened
このように書きたいと思います。しかし、私は言及を見つけることができませんでした。

//can I write like this ?  

SourceDataLine sdl;
try{
    sdl = AudioSystem.getSourceDataLine(audioFormat);
    sdl.open(audioFormat,bufferSize);
}catch(LineUnavailableException ex){
    throw new RuntimeException(null,ex);
}
try(SourceDataLine sdlInTryWithResources = sdl){
    //do something
}  
4

2 に答える 2

0

あなたは物事を考えすぎているようです。

イメージの try-with-resources は存在せず、Java 1.7 以前のようにコードを書き留めます。

確かに、次のような結果になります。

Whatever somethingThatNeedsClosing = null;
try {
  somethingThatNeedsClosing = ...
  somethingThatNeedsClosing.whatever();
} catch (NoIdeaException e) {
  error handling
} finally {
  if (somethingThatNeedsClosing != null) {
    somethingThatNeedsClosing.close()
  }
}

Try-with-resources を使用すると、この例を適宜減らすことができます。

つまり、try-with-resources を使用すると、try ブロック内で使用される 1 つ (または複数) のリソースを定義できます。そしてついに閉店。のように: try ... に対して宣言されたすべてのリソースが閉じられます。

より具体的には、リソースの他のインスタンスについて考えないでください。あなたが現在扱っているものに焦点を合わせてください。

于 2016-09-04T06:30:59.333 に答える