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

    [Java] Continuano i problemi con Class.forName

    Ciao a tutti!

    Ho già postato una domanda relativa al metodo suddetto, e quindi lo so...sono stato stupido a non accorgermi subito di un problema...
    Il mio problema era eseguire un cast di tipo sull'oggetto restituito dalla Class.forName(che ritorna un class), ma siccome non conoscevo a priori il tipo dell'oggetto poichè dopotutto lo stavo importando nel progetto un gentilissimo utente mi aveva fornito la seguente soluzione:

    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"

    Il casting però non funziona! mi da il seguente errore:
    non-static variable myfood cannot be referenced from a static context

    Help!

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Manca una parte del codice di chiamata... comunque ad occhio direi che tu dichiari la variabile myfood fuori dal main (o da un altro metodo statico), quindi come variabile d'oggetto e cerchi di richiamarla dal main (o da un altro metodo statico), che in questo caso può accedere solo a variabili di classe.
    Ti è chiaro il funzionamento del modificatore "static"?

  3. #3
    non è un problema di creare l'istanza, è un problema di variabili statiche o private. Studiati la differenza. Come dice desa, sai cosa comporta?
    ...

  4. #4
    Utente di HTML.it L'avatar di 511769
    Registrato dal
    Mar 2010
    Messaggi
    15
    Static credo identifichi oggetti il cui valore non può essere modificato? Scusate ma sono uno studente alle prime armi...

  5. #5
    è difficile da spiegare per me, ti converrebbe la guida al java.
    In ogni caso provo a definirla in breve.

    Una variabile statica a seguito della dichiarazione della classe, è una variabile che viene allocata staticamente solo una volta. Significa che anche se creerai un futuro nuove istanze la variabile è sempre la solita.

    Un metodo statico non è associato all'istanza della classe e per essere invocato devi fare una cosa del tipo:
    NOME_CLASSE.NOME_METODO_STATICO(param1, param2)

    Quindi, se un metodo statico non è associato all'oggetto dell'istanza, puoi facilmente immaginare che non puoi accedere agli elementi di una istanza, tipo:

    class saluti {
    public int ciao=0; // Questa variabile esiste solo dopo aver creato un oggetto con new saluti()
    public static int ciao2=0; // di questa variabile ne esiste una...da subito.

    public static void main(String args[]) {
    ciao=45; // Errore, "ciao" è una variabile di istanza è main è statico
    ciao2=9; // Corretto!
    }
    ...

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Quello che intendi tu, 511769, è il modificatore "final": se utilizzato sua una variabile la rende una costante, se impiegato su un metodo impedisce che eventuali sottoclassi lo ridefiniscano.
    Come spiegava bene LordSaga (il suo esempio con il codice mi sembra fatto bene), le variabili "static" sono delle variabili condivise: ogni oggetto che istanzierai avrà dei propri attributi, ma farà riferimento alle stesse identiche variabili statiche visibili anche dagli altri oggetti. Per ognuna di esse ne esisterà "una sola copia", che se modificata avrà dunque ripercussioni su tutti gli oggetti appartenenti a quella classe.
    Posso capire però che a prima vista il nome possa sembrare fuorviante.

    Se hai ancora problemi prova a postare il codice completo che utilizzi (racchiudendolo fra i tags
    codice:
     ...
    per formattarlo meglio)

  7. #7
    Utente di HTML.it L'avatar di 511769
    Registrato dal
    Mar 2010
    Messaggi
    15
    No non cè bisogno, grazie alle vostre risposte ho capito il problema e ho risolto. Perdonate la mia insistenza(sto facendo un piccolo progetto e avrei un sacco di domande...) la prossima volta studierò meglio la teoria prima di precipitarmi qui.

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.