Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Aiuto!

    la mia domanda per chiunque mi voglia dare una mano e' questa:

    Antefatto.

    Ho due semplici classi Cake e Pie prese da un libro su java.

    Per come le ho implementate diciamo che un oggetto istanza della classe Cake invoca un metodo (ovviamente public) di Pie.

    Salvo i files in due cartelle distinte.

    1) se non inserisco le due classi in nessun package tutto funziona

    2) se dichiaro che Pie fa parte di un package ,attraverso l'import e aggiungenndo un opportuno classpath tutto funziona

    3) SE INVECE DICHIARO IN CAKE CHE CAKE FA PARTE DI UN PACKAGE NON RIESCO ASSOLUTAMENTE A COMPILARE

    ALLORA MI CHIEDO SONO IO CHE IN QUALCHE MODO SBAGLIO OPPURE DEVO DEDURRE CHE
    QUANDO SCRIVO CLASSI CHE FANNO PARTE DI UN PACKAGE , QUESTE CLASSI NON POTRANNO MAI INVOCARE METODI (E FARE ALTRO) DI CLASSI CHE A LORO VOLTA NON SONO INSERITE IN UN PACKAGE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Aiuto!

    Originariamente inviato da ni_co_opla
    la mia domanda per chiunque mi voglia dare una mano e' questa:

    Antefatto.

    Ho due semplici classi Cake e Pie prese da un libro su java.

    Per come le ho implementate diciamo che un oggetto istanza della classe Cake invoca un metodo (ovviamente public) di Pie.

    Salvo i files in due cartelle distinte.

    1) se non inserisco le due classi in nessun package tutto funziona

    2) se dichiaro che Pie fa parte di un package ,attraverso l'import e aggiungenndo un opportuno classpath tutto funziona

    3) SE INVECE DICHIARO IN CAKE CHE CAKE FA PARTE DI UN PACKAGE NON RIESCO ASSOLUTAMENTE A COMPILARE

    ALLORA MI CHIEDO SONO IO CHE IN QUALCHE MODO SBAGLIO OPPURE DEVO DEDURRE CHE
    QUANDO SCRIVO CLASSI CHE FANNO PARTE DI UN PACKAGE , QUESTE CLASSI NON POTRANNO MAI INVOCARE METODI (E FARE ALTRO) DI CLASSI CHE A LORO VOLTA NON SONO INSERITE IN UN PACKAGE
    Allora ... calma. Innanzitutto bisogna fare alcune premesse (che non so se conosci oppure no).

    a) La struttura dei package si deve "riflettere" nella struttura delle directory sul file-system. Se per una classe dichiarari un package 'prova', allora il file .class deve stare sotto una directory 'prova'.

    b) Devi verificare se la classe l'hai dichiarata 'public' oppure no:
    codice:
    class UnaClasse  { }
    
    public class UnaClasse  { }
    Nel primo caso la classe ha visibilità solo a livello di package (cioè solo da altre classi nello stesso package), nel secondo caso, è visibile da qualunque altra classe (anche in altri package).

    c) Le classi devono essere "visibili" dalla JVM. Se hai una classe prova.Prova (quindi in un package 'prova') e il class si trova in C:\esempio\prova\Prova.class, allora C:\esempio deve essere in 'classpath'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    213
    ho il tuo stesso problema: ho una pagina jsp che deve richiamare un package che contiene delle eccezioni (.java) anche se a me il compilatore non da errori ma me li da tomcat

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Originariamente inviato da tonz79
    ho il tuo stesso problema: ho una pagina jsp che deve richiamare un package che contiene delle eccezioni (.java) anche se a me il compilatore non da errori ma me li da tomcat
    Ne stai già parlando in questa discussione, quindi non intervenire in un'altra discussione aperta da un altro autore per un problema separato. Continua la discussione che hai aperto tu.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Originariamente inviato da ni_co_opla
    la mia domanda per chiunque mi voglia dare una mano e' questa [...]
    Ti invito alla lettura del Regolamento del forum per conoscere tutte le norme di partecipazione a quest'area del forum.

    In particolare, usa titoli più significativi in futuro, sicuramente diversi da "Aiuto!", seguendo le indicazioni del suddetto regolamento; in caso contrario, le discussioni verranno chiuse.

    Non chiudo questa poiché hai già ricevuto risposte significative, quindi mi limito a modificare il titolo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6

    Re: Re: Aiuto!

    Originariamente inviato da andbin
    Allora ... calma. Innanzitutto bisogna fare alcune premesse (che non so se conosci oppure no).

    a) La struttura dei package si deve "riflettere" nella struttura delle directory sul file-system. Se per una classe dichiarari un package 'prova', allora il file .class deve stare sotto una directory 'prova'.

    b) Devi verificare se la classe l'hai dichiarata 'public' oppure no:
    codice:
    class UnaClasse  { }
    
    public class UnaClasse  { }
    Nel primo caso la classe ha visibilità solo a livello di package (cioè solo da altre classi nello stesso package), nel secondo caso, è visibile da qualunque altra classe (anche in altri package).

    c) Le classi devono essere "visibili" dalla JVM. Se hai una classe prova.Prova (quindi in un package 'prova') e il class si trova in C:\esempio\prova\Prova.class, allora C:\esempio deve essere in 'classpath'.
    Prima di tutto ti ringrazio per la tua risposta.

    allora, in una cartella chiamata "temp1" ho messo:

    public class Pie {
    public void f() {
    System.out.println("OK");
    }
    }

    In una seconda cartella chiamata "temp2" ho messo:

    package temp2;

    public class Cake {
    public static void main(String[] args) {
    Pie x = new Pie();
    x.f();
    }
    }

    Dopo aver impostato il classpath da pannello di controllo con C:\.....\temp1 vado nella cartella temp2 digito javac Cake.java e la risposta e' :

    cannot find symbol
    Symbol :class Pie
    location : temp2.Cake
    ecc..

    Tutto questo non succede se commento package temp2;

    DEVO CONCLUDERE CHE DA UNA CLASSE CHE APPARTIENE AD UN PACKAGE NON POSSO INVOCARE METODI DI UNA CLASSE CHE NON APPARTIENE AD UN PACKAGE OPPURE IO STO SBAGLIANDO PERCHE' DEVE ESSERE POSSIBILE CHIAMARE METODI DI CLASSI CHE NON HANNO PACKAGE?
    GRAZIE

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Aiuto!

    Originariamente inviato da ni_co_opla
    allora, in una cartella chiamata "temp1" ho messo:

    public class Pie {
    public void f() {
    System.out.println("OK");
    }
    }

    In una seconda cartella chiamata "temp2" ho messo:

    package temp2;

    public class Cake {
    public static void main(String[] args) {
    Pie x = new Pie();
    x.f();
    }
    }
    Te lo spiego subito. Nel file Pie.java non hai definito un package. Se non viene definito un package, la classe appartiene ad un package speciale, senza nome ("unnamed"). Questo però crea un problema: come può la classe Cake importare la classe Pie, visto che il package di Pie è quello senza nome??? Infatti non può.

    Quindi la regola è: una classe in un package specifico, non può usare una classe nel package unnamed.

    Soluzione per il tuo caso: metti la classe Pie nel package 'temp1' (visto che è già in quella directory) e poi in Cake.java metti import temp1.Pie;
    A quel punto però devi mettere in classpath la directory che contiene temp1 e temp2.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8

    Re: Re: Re: Re: Aiuto!

    Originariamente inviato da andbin
    Te lo spiego subito. Nel file Pie.java non hai definito un package. Se non viene definito un package, la classe appartiene ad un package speciale, senza nome ("unnamed"). Questo però crea un problema: come può la classe Cake importare la classe Pie, visto che il package di Pie è quello senza nome??? Infatti non può.

    Quindi la regola è: una classe in un package specifico, non può usare una classe nel package unnamed.

    Soluzione per il tuo caso: metti la classe Pie nel package 'temp1' (visto che è già in quella directory) e poi in Cake.java metti import temp1.Pie;
    A quel punto però devi mettere in classpath la directory che contiene temp1 e temp2.
    Ti ringrazio tanto per il tuo aiuto.

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.