私が行った場合
try(Lock lock = lockProvider.lock()) {
// some code that doesn't use variable lock
}
コンパイラまたは JITer がロックの作成をブロック内で未使用と見なして削除するリスクはありますか?
後で編集:
少し文脈。私は、C# では次のようなことが許可されている .NET バックグラウンドから来ています。
using(Transaction tx = BeginTransaction())
{
// code that does things without touching the tx variable, such as SQL connections and stuff
}
実際、次のように短縮することもできます
using(BeginTransaction())
{
// code that does things without touching the tx variable, such as SQL connections and stuff
}
静的コンパイラと JIT コンパイラはBeginTransaction
呼び出しを保持し、実行時に常に発生します。
ただし、Java では、リソースである他のものに try-with-resources を使用することに関して、多くの問題と否定性があるようです。