Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [JAVA] Rilascio risorse e IllegalStateException

    Ciao,
    avrei bisogno di un aiuto per una classe che sto scrivendo:
    allora, tra i vari metodi della classe ce n'è uno (close) che una volta lanciato deve liberare le risorse.
    Ma cosa si intende per liberare le risorse?
    Mettere a null tutti gli oggetti che sono visibili da tutta la classe?

    In più, una volta lanciato close() se invoco un qualsiasi metodo della classe devo ottenere una eccezione di tipo IllegalStateException, ma come è possibile farlo?


    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Rilascio risorse e IllegalStateException

    Originariamente inviato da Downloader
    avrei bisogno di un aiuto per una classe che sto scrivendo:
    allora, tra i vari metodi della classe ce n'è uno (close) che una volta lanciato deve liberare le risorse.
    Ma cosa si intende per liberare le risorse?
    Mettere a null tutti gli oggetti che sono visibili da tutta la classe?

    In più, una volta lanciato close() se invoco un qualsiasi metodo della classe devo ottenere una eccezione di tipo IllegalStateException, ma come è possibile farlo?
    Dovresti precisare meglio cosa stai facendo, che ti classe è, cosa fa, quali "risorse" (di qualunque tipo) usa ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Ah ok, pensavo fosse possibile rimanere sul generico.

    Allora:
    la classe è stata fatta da me, e permette l'apertura, la chiusura e la possibilità di inserire del testo all'interno di un file.
    Come risorse usa queste classi:
    PrintStream, File, FileOutputStream, String, più alcuni tipi di dato primitivi.

    La classe possiede n metodi, tra cui uno chiamato chiudi(), che deve prendere dei dati presenti in un vettore e salvarli dentro ad un file.
    Dopo il salvataggio, devo rilasciare memoria e fare in modo che se dopo la chiamata a chiudi(), io lancio un qualsiasi metodo (chiudi incluso, ovviamente) il programma debba lanciare una eccezione di tipo IllegalStateException.

    Ora:
    con rilascio di risorse io intendo che, devo lanciare il metodo close presente negli oggetti di tipo PrintStream e FileOutputStream, e mettere a null gli oggetti di tipo File e String, mentre i tipi primitivi (int, boolean...) restano invariati.
    E' corretto?

    Mentre per quanto riguarda l'invocazione dell'eccezione...non so cosa fare.


    Spero di essermi spiegato un po' meglio.
    Grazie dell'aiuto!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Downloader
    con rilascio di risorse io intendo che, devo lanciare il metodo close presente negli oggetti di tipo PrintStream e FileOutputStream, e mettere a null gli oggetti di tipo File e String, mentre i tipi primitivi (int, boolean...) restano invariati.
    E' corretto?
    Sì, è corretto. Se usi classi che usano a loro volta delle "risorse" e che offrono un metodo close() (o con nome diverso) allora nella tua classe che incapsula il tutto è assolutamente corretto e necessario che il close() (o chiudi() come hai detto tu) chiuda tutto ciò che sta "sotto" alla tua classe.

    Originariamente inviato da Downloader
    Mentre per quanto riguarda l'invocazione dell'eccezione...non so cosa fare.
    La cosa più banale è un flag boolean, inizialmente a false, quando chiudi lo metti a true. È ovvio che true = già chiuso, quindi basta un test nei metodi.
    Puoi anche usare come "flag" una delle risorse, es. il PrintStream che hai detto se sai/garantisci a priori che dopo la costruzione dell'oggetto c'è sicuramente. Al close lo annulli e già qui hai il "flag" ... se è null non è più usabile!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Perfetto.
    Grazie 1000 dell'aiuto.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Ciao,
    avrei un'altra domanda in merito all'eccezione:
    dal momento che devo seguire delle specifiche per realizzare i metodi, questi non devono essere strutturati in maniera tale che possano lanciare eccezioni.
    Mi spiego con un esempio:
    Il metodo deve essere definito cosi:
    codice:
    public void method1() {}
    e non cosi:
    codice:
    public void method1() throws IllegalStateException {}
    Ora, se utilizzassi il blocco try-catch come dovrei fare a poter sollevare quel tipo di eccezione?
    Ci sono invece soluzioni alternative?


    Grazie ancora!

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Downloader
    Il metodo deve essere definito cosi:
    codice:
    public void method1() {}
    e non cosi:
    codice:
    public void method1() throws IllegalStateException {}
    Ok, va benissimo. Perché IllegalStateException è una eccezione "unchecked". Una eccezione "unchecked" non sei obbligato a dichiararla con il throws e nemmeno a catturarla/gestirla. Insomma ... non sei obbligato a tenerne conto.

    Originariamente inviato da Downloader
    Ora, se utilizzassi il blocco try-catch come dovrei fare a poter sollevare quel tipo di eccezione?
    Ci sono invece soluzioni alternative?
    In che senso?? Non ho capito il tuo dubbio. Nel method1 è banale:

    codice:
    public void method1() {
        if (condizione_stato_errato) {
            throw new IllegalStateException("....tuo messaggio....");
        }
    
        ....
    }
    Chi invoca method1() non è affatto obbligato a catturare/gestire IllegalStateException. E nemmeno a dichiararla a sua volta con il throws!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Grazie, sei stato gentilissimo e chiarissimo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.