Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di 511769
    Registrato dal
    Mar 2010
    Messaggi
    15

    [Java] Metodo Class.forName, alcuni chiarimenti

    Ciao a tutti! Scrivo per la prima volta su questo forum e spero di formulare la mia domanda nella maniera più appropriata. Vorrei chiedere alcuni chiarimenti sul metodo forName della classe Class. Il mio problema è il seguente: devo usare questo metodo per importare una classe java all'interno di un mio progetto. Il problema è che il Class.forName mi restituisce un oggetto di tipo class, il quale non mi permette in alcun modo di usufruire dei metodi della classe che volevo importare. Ovviamente non ho la possibilità di eseguire un cast in quanto sto usando questo metodo proprio per importare la classe nel progetto, quindi come posso fare per avere a disposizione un oggetto a tutti gli effetti della classe che ho importato? So dell'esistenza di metodi della classe class tipo getField o getMethod, ma purtroppo non mi sono serviti a molto...

    Grazie in anticipo per le vostre risposte.

  2. #2
    c'è il metodo newInstance().
    Per usare questo metodo la classe deve avere un costruttore senza parametri.

    Vector act = (Vectpr) Class.forName("java.util.Vector").newInstance();
    ...

  3. #3
    per usare i metodo della classe, o conosci la classe (ma in quel caso non avresti bisogno della class.forName), oppure devi conoscere almeno una interfaccia comunque delle classi che puoi costruire.

    interface Cibo {
    string getName();
    int getPeso();
    }

    class Pizza implements Cibo {
    String getName() {return "Pizza";}
    int getPeso() {return 123;}
    }


    Cibo myfood=(Cibo)Class.forName("Pizza").newInstance();
    System.out.print(myfood.getName()); // Stampa "pizza"
    ...

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Se hai un costruttore vuoto il procedimento di LordSaga è corretto.
    Se invece volessi utilizzare un altro costruttore puoi fare così:

    codice:
    TuoOggetto ogg = (TuoOggetto)Class.forName("package.TuoOggetto").getConstructor(classe1, classe2, ..., classeN).newInstance(parametro1, parametro2, ..., parametroN);
    in cui la getConstructor (per identificare il costruttore corretto) riceve IN ORDINE le classi dei parametri di cui necessita. Lo stesso per la newInstance, con gli oggetti necessari per l'istanziazione tramite il costruttore che hai indicato.

    Con la dichiarazione di cui sopra, in effetti si conosce già il tipo di oggetto caricato: la variabile è definita come "TuoOggetto" (che dovrai personalizzare). Quindi puoi richiamare direttamente i suoi metodi

  5. #5
    Utente di HTML.it L'avatar di 511769
    Registrato dal
    Mar 2010
    Messaggi
    15
    Grazie 1000 per le vostre risposte, cavolo potevo pensarci prima!

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.