Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Java] Richiamare un'istanza creata nella Main

    Innanzi tutto BUON ANNO a Tutti.

    Preciso meglio la mia domanda che dall'oggetto non si comprende bene
    e lo faccio esponendo il mio problema che, sembrerà a molti banale, ma
    per me che non ho grossa esperienza con Java non lo è.
    Dunque.....
    ..... supponiamo che nel package di default ho la mia classe main:
    Classe Main FactoryMain:
    codice:
    import database.DatiGenStaz;
    public class FactoryMain {
    
    	public static DatiGenStaz datiGen;
    	
    	public static void main(String[] args) {
    		datiGen = new DatiGenStaz(); // inizializza l'oggetto datiGen
    	} // FINE COSTRUTTORE
    
    } // FINE CLASSE
    Nella Classe Main FactoryMain creo l'istanza della Classe DatiGenStaz con il nome datiGen;
    la predetta classe si trova all'interno di un altro package.

    Supponiamo ora che voglia richiamare l'istanza datiGen inizializzata nella Main da una terza Classe in un terzo Package esempio.....
    codice:
    package stampe;
    
    public class Stampa {
    
         public Stampa {
                String nome = datiGen.getNome;
                System.out.println("nome: "+nome);
         } // FINE COSTRUTTORE
    
    } // FINE CLASSE
    Il problema è che non riesco a "chiamare" l'istanza datiGen
    da nessun'altra Classe.

    Grazie a Tutti per l'attenzione..... BUON ANNO

  2. #2
    importi il package di default dove vi è FactoryMain, poi dalla classe Stampa fai FactoryMain.datiGen (essendo static e public) e il gioco è fatto.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quell'attributo pubblico (e statico!) non si può vedere...

    Spiega meglio cosa devi fare, così ti si può consigliare un approccio migliore.
    Ti serve un'istanza (ed una sola) di DatiGenStaz? Potresti applicare il pattern Singleton ad esempio...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Originariamente inviato da celtico94
    importi il package di default dove vi è FactoryMain, poi dalla classe Stampa fai FactoryMain.datiGen (essendo static e public) e il gioco è fatto.
    Il problema è che non riesco ad importare nessuna Classe dal Package Default !!
    Cercherò di spiegarmi meglio con un altro esempio......

  5. #5
    Grazie per la Vostra attenzione......

    Originariamente inviato da Alex'87
    Spiega meglio cosa devi fare, così ti si può consigliare un approccio migliore.
    Ti serve un'istanza (ed una sola) di DatiGenStaz? Potresti applicare il pattern Singleton ad esempio...
    Cercherò di farlo con un altro esempio.....

    Classe Main nel Package Default:
    codice:
    import dati.Persone;
    
    public class Main {
    
         public static Persone ciccio;
         public static Persone pippo;
    
         public static void main(String[] args) {
    
              ciccio = new Persone("Francesco","Bianchi",27);
              pippo = new Persone("Giuseppe","Rossi",24);
    
         } // FINE COSTRUTTORE
    
    } // FINE CLASSE
    Classe Persone nel package dati:
    codice:
    package dati;
    
    public class Persone {
    
         private static String nome, cognome;
         private static int eta;
    
         public Persone(String nome, String cognome, int eta) {
    
              this.nome = nome;
              this.cognome = cognome;
              this.eta = eta;
         
          } // FINE COSTRUTTORE
    
         public String getNome() {
              return nome;
         } // FINE METODO
    
         public String getCognome() {
              return cognome;
         } // FINE METODO
    
         public int getEta() {
              return eta;
         } // FINE METODO
    
    } // FINE CLASSE

    Classe Stampa nel package output:
    codice:
    package output;
    
    public class Stampa {
    	
    	public Stampa() {
    		
    		System.out.println(
    			"nome: " + ciccio.getNome() +"\n"+
    			"cognome: " + ciccio.getCognome() +"\n"+
    			"età: " + ciccio.getEta() +"\n"+
    			"---------------------------------------\n"+
    			"nome: " + pippo.getNome() +"\n"+
    			"cognome: " + pippo.getCognome() +"\n"+
    			"età: " + pippo.getEta() );
    		
    	} // FINE COSTRUTTORE
    
    } // FINE CLASSE
    Il mio problema è che,
    tralasciando da dove venga "chiamata" la Classe Stampa,
    come richiamo le istanze "pippo" e "ciccio" della Classe Persone,
    create nella Classe Main?


    Perché così com'è nell'esempio non
    va bene e nemmeno se cerco di importare il Package Default,
    che tra l'altro non so se sia possibile o come si fa!!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    In Java, dalla vecchia versione 1.4 (quindi, da più di 10 anni), non è più possibile accedere alle classi che sono definite nel default-package (che non è più importabile tramite la dicitura Unfinished), da classi definite all'interno di un named-package.

    L'unica soluzione consiste nello spostare le classi del default-package all'interno di un named-package.

    Quindi, porta la classe Main all'interno di un package con nome (inventa pure tu il nome). Dopodichè, accederai all'istanza semplicemente usando il nome della classe seguito dal nome dell'istanza:

    codice:
    String nomeDiCiccio = tuopackage.Main.ciccio.getNome();

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Grazie della risposta.

    Quindi, crearmi una Classe Home e un Package start dove "iniziare il tutto"
    e nel Package di Default lasciare solo Classe Main che non fa altro che lanciarmi la Classe Home!!

    Grazie mille e Buon Anno

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Wolvy23
    Grazie della risposta.

    Quindi, crearmi una Classe Home e un Package start dove "iniziare il tutto"
    e nel Package di Default lasciare solo Classe Main che non fa altro che lanciarmi la Classe Home!!

    Grazie mille e Buon Anno
    Ma anche no. Perchè devi avere per forza una classe Main nel default-package?
    Nessuno ti obbliga ad avere classi nel default package (anzi, normalmente, per applicazioni un po' più complesse dei classici HelloWorld, non ce ne sono proprio).

    Sposta la classe in un named-package e continua ad usare quella per avviare l'appilcazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Ok grazie.... gentilissimo.

    Posso chiederti una cosa sulle stringhe query di SQLite?

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Wolvy23
    Posso chiederti una cosa sulle stringhe query di SQLite?
    Apri una nuova discussione, no?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.