Насколько я могу судить, создание нового объекта не является требованием, а синтаксис Try-with-resources просто нуждается в локальной переменной, чтобы вызовать Close () на Когда это выходит из строя. Поэтому вы можете использовать его для управления «парными операциями», такими как выделение чего -то из пула и убедиться, что оно возвращается. Объединенный экземпляр, когда вам больше не нужно: < /p>
// init
class MyHandle implements AutoCloseable {
boolean inUse = false;
public MyHandle allocate() {
inUse = true;
return this;
}
public void close() {
inUse = false;
}
}
MyHandle[] pool = new MyHandle[POOL_SIZE];
for (int i = 0; i < pool.length; i++) {
pool = new MyHandle(i);
}
// allocate
MyHandle allocateFromPool() {
for (int i = 0; i < pool.length; i++) {
if (!pool.inUse)
return pool.allocate();
}
throw new Exception("pool depleted");
}
// using resources from the pool
try (MyHandle handle = allocateFromPool()) {
// do something
}
// at this point, inUse==false for that handle...
< /code>
Это считается плохой формой? Есть какой -то серьезный недостаток при подходе к подходу выше. Я обнаружил, что использование этого в библиотеке создает чистый API. с каким -то примером. Очевидно, это не настоящий код!
Подробнее здесь: https://stackoverflow.com/questions/386 ... e-bad-form