Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    49

    [Java] Istanziare oggetti di una certa classe conoscendone solo il nome.

    Salve ragazzi, sto studiando il libro di Claudio De Sio Cesari su Java 5. Mi trovo nel paragrafo riguardante la classe Class e la reflection. L'ultima caratteristica specificata nel libro recita " Tramite la classe Class e' anche possibile istanziare oggetti di una certa classe, conoscendone solo il nome."
    Gia questa affermazione mi ha confuso. Io quando istanzio un ogetto devo conscere il nome della classe. E' l'unica cosa che devo conoscere. Infatti scrivo:

    codice:
    MiaClasse reference = new MiaClasse();
    Io conoscendo solo il nome della classe ho istanziato un oggetto della sudetta classe.

    Ora il libro continua mostrando un esempio:

    codice:
    try {            Class miaClasse = Class.forName("MiaClasse");
                Object ref = miaClasse.newInstance();
                
            } catch (ClassNotFoundException  exc) {
                ...
                
            }
    Ora io ho interpretato questo codice in questa maniera: miaClasse e' un reference che punta alla classe MiaClasse(Che e' la classe realmente esistente). Quindi e come se copiassi in miaClasse la classe MiaClasse. Dopodiche devo creare il reference per la classe. Visto che non so di che tipo e la classe (Anche se non serve saperlo in teoria.. mi basta sapere il nome no?)uso la classe Object (utilizzando cosi il poliformismo) per creare il reference. Quindi crea il reference ref che pensa di puntare ad un object ma che in realta punta ad una istanza di miaClasse(MiaClasse).

    Ma penso di aver sbagliato ragionamento visto che poi non posso utilizzare il reference ref per accedere ai metodi della classe MiaClasse. Quindi la mia domanda e': Cosa fa in realta' questo codice? Quale e' la sua utilita'?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Nekra49 Visualizza il messaggio
    Ma penso di aver sbagliato ragionamento visto che poi non posso utilizzare il reference ref per accedere ai metodi della classe MiaClasse. Quindi la mia domanda e': Cosa fa in realta' questo codice? Quale e' la sua utilita'?
    Grazie.
    Se in una TuaClasse fai es. un:

    AltraClasse ac = new AltraClasse();

    all'interno del bytecode (il contenuto del .class) di TuaClasse c'è un riferimento "statico" ad AltraClasse. Se AltraClasse non è rintracciabile (non è "in classpath"), la tua applicazione non funzionerà e si schianterà con un NoClassDefFoundError nel momento in cui è necessario caricare la definizione di AltraClasse.

    Il Class.forName invece è utile specialmente nei casi dove il nome della classe non è noto a priori (magari è ottenuto da file di configurazione, metadati, ecc...) e c'è di mezzo il polimorfismo nel senso che quella classe magari implementa una interface X (o super-classe, anche astratta) che TU conosci e di cui hai la definizione. Questo viene sfruttato ad esempio quando si cerca di realizzare un sistema basato su "plugin".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.