Sì, lo scopo della prova è limitato a quello.In effetti la portata inizia con {e finisce con}, quindi questo sarebbe anche creare un sub-ambito
void foo() {
{
Ini myIni = new Ini(new FileReader(myFile));
}
myIni.get("toto"); //error here, since myIni is out of scope
}
Per risolvere il problema, inizializzare myIni
con null, ed essere consapevoli che se il tentativo fallisce, myIni.get("toto");
si tradurrebbe in una NullPointerException.
Quindi è necessario fornire un account o lanciare un'altra eccezione dal blocco catch.
Verificare la presenza di null:
Ini myIni = null;
try {
myIni = new Ini(new FileReader(myFile));
} catch (IOException e) {
e.printStackTrace();
}
if(myIni != null) {
myIni.get("toto");
//access the rest of myIni
} else {
//handle initialization error
}
eccezione del tiro:
Ini myIni = null;
try {
myIni = new Ini(new FileReader(myFile));
} catch (IOException e) {
e.printStackTrace();
throw new MyCustomInitFailedException(); //throw any exception that might be appropriate, possibly wrapping e
}
myIni.get("toto");
come già suggerito da @khachik si potrebbe anche mettere il blocco try intorno l'intero utilizzo di myIni
se questo è possibile e opportuno. Quale soluzione scegli dipende dalle altre tue esigenze e dal tuo design.
Non eseguire 'e.printStackTrace()'. Basta buttare e'. – BalusC