Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Problema passaggio di variabile in classe dello stesso package

    Ciao a tutti,
    ho dichiarato una variabile in una classe di un package:
    codice:
     public String elemento;
    e sto cercando di utilizzarla all'interno di un'altra classe dello stesso package
    codice:
    import java.io.File;
    
    public class CheckFile {
    
        private static boolean foundFolder = false;
    
        public static void main(String[] args) {
            File dir = new File("dirIniziale");
            findDirectory(dir);
        }
    
        private static void findDirectory(File parentDirectory) {
            if(foundFolder) {
                return;
            }
            File[] files = parentDirectory.listFiles();
            for (File file : files) {
                if (file.isFile()) {
                    continue;
                }
                if (file.getName().equals(String (elemento))) {
                    foundFolder = true;    
                    break;
                    
                }
                if(file.isDirectory()) {
                   findDirectory(file);
                }
            }
        }
    
    }
    in modo tale da poterla utilizzare come chiave di ricerca di una cartella all'interno della directory "dirIniziale" ma non va!
    Dove sbaglio???

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    1. Per usare elemento devi avere un'istanza della classe che la contiene (a meno che elemento non sia static)
    2. elemento è public: pessima cosa
    3. Se elemento è String, String(elemento) cosa sarebbe? Un cast? (che comunque è (String) elemento))
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    1. Per usare elemento devi avere un'istanza della classe che la contiene (a meno che elemento non sia static)
    2. elemento è public: pessima cosa
    3. Se elemento è String, String(elemento) cosa sarebbe? Un cast? (che comunque è (String) elemento))
    Perchè è una pessima cosa dichiarare elemento public ?
    Non è preferibile se voglio utilizzare elemento al di fuori della classe dove è stato creato ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho fatto in questo modo:
    codice:
    import java.io.File;
    
    public class CheckFile {
        
    
        private static boolean foundFolder = false;
    
        public static void main(String[] args) {
            File dir = new File("dirIniziale");
            findDirectory(dir);
        }
    
        private static void findDirectory(File parentDirectory) {
            
            PV p = new PV();
            
           
            
            if(foundFolder) {
                return;
            }
            File[] files = parentDirectory.listFiles();
            for (File file : files) {
                if (file.isFile()) {
                    continue;
                }
                if (file.getName().equals(p.elemento)) {
                    foundFolder = true;  
                    break;
                }
                if(file.isDirectory()) {
                   findDirectory(file);
                }
            }
        }
    ma non riesco a capire se va bene!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    codice:
    import java.io.File;
    
    public class CheckFile {
        
        private static String s;
        private static boolean foundFolder = false;
    
        public static void main(String[] args) {
            File dir = new File("dirIniziale");
            findDirectory(dir);
            System.out.println(s);
        }
    
        private static void findDirectory(File parentDirectory) {
            
            PVEstimation p = new PVEstimation();
            
           
            
            if(foundFolder) {
                return;
            }
            File[] files = parentDirectory.listFiles();
            
            for (File file : files) {
                if (file.isFile()) {
                    continue;
                }
                if (file.getName().equals(p.elemento)) {
                    foundFolder = true;  
                    s = file.getName();
                    break;
                }
                if(file.isDirectory()) {
                   findDirectory(file);
                }
            }
            
        }
    
    }
    Non capisco perchè mi restituisce null !!!

    Potete aiutarmi?

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Beh, tu stai istanziando un PVEstimation senza inizializzare nulla. Pertanto tutti i suoi campi saranno null.
    Da nessuna parte fai p.elemento = qualcosa...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    codice:
    import java.io.File;
    
    public class CheckFile {
        
        private static String s;
        private static boolean foundFolder = false;
    
        public static void main(String[] args) {
            File dir = new File("dirIniziale");
            findDirectory(dir);
            System.out.println(s);
        }
    
        private static void findDirectory(File parentDirectory) {
            
            PVEstimation p = new PVEstimation();
            
           
            
            if(foundFolder) {
                return;
            }
            File[] files = parentDirectory.listFiles();
            
            for (File file : files) {
                if (file.isFile()) {
                    continue;
                }
                if (file.getName().equals(p.elemento)) {
                    foundFolder = true;  
                    s = file.getName();
                    break;
                }
                if(file.isDirectory()) {
                   findDirectory(file);
                }
            }
            
        }
    
    }
    Non capisco perchè mi restituisce null !!!

    Potete aiutarmi?
    il metodo listFiles ho notato che mi permette di avere i pathname di tutti gli elementi contenuti in una cartella.
    Come posso fare per avere invece del percorso, solo i nomi degli elementi contenuti nella directory ????

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Perchè è una pessima cosa dichiarare elemento public ?
    Non è preferibile se voglio utilizzare elemento al di fuori della classe dove è stato creato ?
    No. L'accessi ai campi va sempre fatto attraverso gli opportuni metodi (getter e setter). Questo perché in questo modo è possibile controllare l'accesso ai campi ed evitare stati inconsistenti.

    Ti faccio un esempio.
    Abbiamo una classe "Person" che modella una persona. Avrà nome, cognome, età ecc.
    L'età ha un vincolo: deve essere non negativa (ovviamente!)

    Approccio "public":

    codice:
    public class Person {
        public int age;
        ... // altri campi, non ci interessano...
    }
    Potrei ora fare questo:

    Person p = new Person();
    p.age = -100; // non ha senso ma non c'è nulla che me lo impedisce!

    Un ipotetico metodo calcolaPensione(p) mi darebbe risultati sbagliati! BOOM!

    Approccio serio:

    codice:
    public class Person {
        private int age;
        
        public void setAge(int age) {
            if (age < 0) {
                throw new IllegalArgumentException("age must be >= 0!");
            }
            
            this.age = age;
        }
    
        public int getAge() { 
            return age;
        }
    
        ... // altra roba...
    }
    La situazione ora cambia:

    Person p = new Person();
    p.age = -100; // ERRORE DI COMPILAZIONE! age è privato, non posso accederci!

    p.setAge(-100); // ERRORE A RUNTIME: mi stampa sulla console "age must be >= 0!"
    p.setAge(40); // OK!

    int age = p.getAge();
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Si capisco benissimo quello che dici, però nel caso una variabile sia "interna" nel senso che la uso per metterci solo determinati valori definiti da me in un menù a tendina, potrebbe anche andare, no?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Beh, tu stai istanziando un PVEstimation senza inizializzare nulla. Pertanto tutti i suoi campi saranno null.
    Da nessuna parte fai p.elemento = qualcosa...
    elemento l'ho dichiarato public all'interno di PVEstimation, poi l'ho utilizzato all'interno del metodo privato (jButton), sempre della classe PVEstimation. Ora, all'interno della classse di cui sopra (dello stesso package) io vorrei utilizzare il valore corrente di elemento, che si trova nel metodo privato, pensando che istanziando la classe mi avrebbe dato direttamente il valore di elemento in p.elemento.

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.