Soweit ich das beurteilen kann Wenn das außerhalb des SCOPE geht. Daher können Sie es verwenden, um "gepaarte Operationen" zu steuern, z. B. etwas aus einem Pool zuzuweisen und sicherzustellen, dass es zurückgegeben wird. gepoolte Instanz, wenn Sie es nicht mehr benötigen: < /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>
Wird diese schlechte Form angesehen? Es gibt einen großen Nachteil, wenn Sie den oben genannten Ansatz verfolgen. Ich finde, dass die Verwendung in einer Bibliothek eine saubere API erzeugt. mit einem Beispiel. Offensichtlich ist es kein echter Code!
