teljesen értem, mit szeretnél mondani, de az továbbra sem pontos.
A következő két kód tökéletesen* ekvivalens Javaban:
public void test1() {
InputStream is = getInputStream();
try {
is.read();
} catch (IOException e) {
//catch
} finally {
// close
if (is != null) {
try {
is.close();
} catch (Exception ignore) {
}
}
}
}
public void test2() {
try(InputStream is = getInputStream()) {
is.read();
} catch (IOException e) {
// catch
}
}
Meg merem kockáztatni, C#-ban is hasonló syntax sugar a using, semmi több.
Itt, az első esetben, bár nem használok Closeable interfészt, se try-with-resources dolgot, mindenféle GC nélkül elenged minden erőforrást az InputStream a blokk végén. Ezt el lehet érni mindenféle IDisposable, meg using, meg egyebek nélkül is, rendesen odafigyelve. És nem, ennek továbbra sincs semmi köze ahhoz, hogy „annak az egy szem objektumnak a felszabaditasa mar determinisztikus lesz”. Meg lesz hívva egy függvény, amit sacc-per-kábé ugyanarra szokás használni, mint a destruktort c++-ben (engedje el a korlátos erőforrásait az objektum), de ez merőben más, mint amit te állítottál.
*: a tökéletesen túlzás, tudom. a példa szempontjából azonban lényegtelen a különbség.
--
blogom