Restituire Oggetti dai Metodi in Java

Concetti Chiave
  • In Java, è possibile restituire oggetti dai metodi, consentendo una maggiore flessibilità nella programmazione orientata agli oggetti.
  • Un metodo può restituire un oggetto di qualsiasi tipo, inclusi i tipi di classe definite dall'utente.
  • La restituzione di oggetti consente di creare nuovi oggetti basati su quelli esistenti, come dimostrato nel metodo incrementaDiDieci().
  • Gli oggetti creati con new all'interno di un metodo continueranno a esistere finché esiste un riferimento a essi, grazie alla gestione della memoria di Java tramite il garbage collector.

Restituire Oggetti

Un metodo in Java può restituire qualsiasi tipo di dato, inclusi i tipi di classe che si possono creare.

Per esempio, nel programma seguente, il metodo incrementaDiDieci() restituisce un oggetto in cui il valore di a è dieci unità maggiore rispetto a quello dell'oggetto invocante.

// Restituire un oggetto.
class Test {
    int a;

    Test(int i) {
        a = i;
    }

    Test incrementaDiDieci() {
        Test temp = new Test(a + 10);
        return temp;
    }
}

class RestituisciOggetto {
    public static void main(String[] args) {
        Test ogg1 = new Test(2);
        Test ogg2;

        ogg2 = ogg1.incrementaDiDieci();
        System.out.println("ogg1.a: " + ogg1.a);
        System.out.println("ogg2.a: " + ogg2.a);

        ogg2 = ogg2.incrementaDiDieci();
        System.out.println("ogg2.a dopo il secondo incremento: "
                           + ogg2.a);
    }
}

L'output generato da questo programma è mostrato qui:

ogg1.a: 2
ogg2.a: 12
ogg2.a dopo il secondo incremento: 22

Come si può vedere, ogni volta che incrementaDiDieci() viene invocato, viene creato un nuovo oggetto, e un riferimento a esso viene restituito alla routine chiamante.

Consiglio

Persistenza degli oggetti con new

Il programma precedente mette in evidenza un altro punto importante: poiché tutti gli oggetti sono allocati dinamicamente usando new, non è necessario preoccuparsi che un oggetto esca dal contesto al termine del metodo in cui è stato creato.

L'oggetto continuerà a esistere finché esisterà un riferimento a esso da qualche parte nel programma. Quando non ci sono più riferimenti, l'oggetto verrà reclamato dal garbage collector al successivo ciclo di raccolta.