Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137

    Ottenere valore tramite get

    Buonasera, ho un piccolo quesito per voi.
    Ho una stringa memorizzata a Db del tipo

    String s = "indirizzo.numeroCivico";

    Ipotizzando di avere
    - una classe Persona con all'interno un oggetto indirizzo di tipo Indirizzo e i set e get associati
    - Una classe Indirizzo con all'interno un Stringa numeroCivico e i set e get associati

    come posso scrivere una funzione che data la stringa s e un oggetto Persona già popolato mi vada a recuperare il numeroCivico ?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ma perché Persona e Indirizzo sono due classi separate? Concettualmente mi sembra errato.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137
    codice:
    public class Indirizzo {
        private String via;
        private String numeroCivico;
        private String citta;
        private String provincia;
      
        public String getVia() {
            return via;
        }
        public void setVia(String via) {
            this.via = via;
        }
        public String getNumeroCivico() {
            return numeroCivico;
        }
        public void setNumeroCivico(String numeroCivico) {
            this.numeroCivico = numeroCivico;
        }
        public String getCitta() {
            return citta;
        }
        public void setCitta(String citta) {
            this.citta = citta;
        }
        public String getProvincia() {
            return provincia;
        }
        public void setProvincia(String provincia) {
            this.provincia = provincia;
        }
      
      
    }
    
    public class Persona {
        private String nome;
        private String cognome;
        private Indirizzo indirizzo;
        
        
        public String getNome() {
            return nome;
        }
        public void setNome(String nome) {
            this.nome = nome;
        }
        public String getCognome() {
            return cognome;
        }
        public void setCognome(String cognome) {
            this.cognome = cognome;
        }
        public Indirizzo getIndirizzo() {
            return indirizzo;
        }
        public void setIndirizzo(Indirizzo indirizzo) {
            this.indirizzo = indirizzo;
        }
             
    }

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Macgiglio Visualizza il messaggio
    Buonasera, ho un piccolo quesito per voi.
    Ho una stringa memorizzata a Db del tipo

    String s = "indirizzo.numeroCivico";

    Ipotizzando di avere
    - una classe Persona con all'interno un oggetto indirizzo di tipo Indirizzo e i set e get associati
    - Una classe Indirizzo con all'interno un Stringa numeroCivico e i set e get associati

    come posso scrivere una funzione che data la stringa s e un oggetto Persona già popolato mi vada a recuperare il numeroCivico ?
    Hai vari modi per farlo:

    1) Usi la reflection (prolisso)
    2) Usi sistemi come SPEL (Spring Expression Language) o janino

    Se chiarisci meglio il tuo obiettivo posso aiutarti in modo più specifico.


    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ma perché Persona e Indirizzo sono due classi separate? Concettualmente mi sembra errato.
    Sarebbe sbagliato il contrario...
    Ultima modifica di Alex'87; 09-11-2013 a 13:25
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Hai vari modi per farlo:

    1) Usi la reflection (prolisso)
    2) Usi sistemi come SPEL (Spring Expression Language) o janino

    Se chiarisci meglio il tuo obiettivo posso aiutarti in modo più specifico.



    Sarebbe sbagliato il contrario...
    Grazie,
    praticamente leggo da un xml una stringa del tipo "indirizzo.numeroCivico" e con questa devo recuperare il valore, in questo caso il numero civico all'interno, all'interno di un oggetto persona già tutto popolato. Mi servirebbe una funzione che dato l'oggetto Persona e una determinata stringa mi vada a cercare il valore se esiste utilizzando i get messi a disposizione dalle classi prima elencate.
    Se puoi farmi qualche esempio si sarei grato...

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se vuoi usare la reflection puoi iniziare guardando questa discussione su Stack Overflow, che mi pare abbastanza completa: http://stackoverflow.com/questions/1...me-as-a-string

    Usando SpEL (ma in questo modo ti porti dietro un pezzo dello Spring Framework...) però è molto più semplice perché ti nasconde tutta la reflection:

    codice:
    Persona persona = new Persona();
    String s = "indirizzo.numeroCivico";
    
    ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true));
    Expression expression = parser.parseExpression(s);
    String numeroCivico = (String) expression.getValue(persona);
    http://docs.spring.io/spring/docs/3....pressions.html
    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
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Sarebbe sbagliato il contrario...

    vero, avevo pensato in termini troppo semplicistici e poco O-O

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Se vuoi usare la reflection puoi iniziare guardando questa discussione su Stack Overflow, che mi pare abbastanza completa: http://stackoverflow.com/questions/1...me-as-a-string

    Usando SpEL (ma in questo modo ti porti dietro un pezzo dello Spring Framework...) però è molto più semplice perché ti nasconde tutta la reflection:

    codice:
    Persona persona = new Persona();
    String s = "indirizzo.numeroCivico";
    
    ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true));
    Expression expression = parser.parseExpression(s);
    String numeroCivico = (String) expression.getValue(persona);
    http://docs.spring.io/spring/docs/3....pressions.html
    Purtroppo non posso usare Spring. Mi sono documentato un po' e ho abbozzato queste quattro righe di codice che sembra funzionino. Mi potere dare suggerimenti per miglioramenti ?

    codice:
    public class Test {
        public static void main(String args[]) throws Exception {
            Indirizzo indirizzo = new Indirizzo("via Rossi", "10", "Roma", "RM");
            Persona pp = new Persona("rossi","carlo", indirizzo);
            String a = "indirizzo.numeroCivico";
            String[] percorso = a.split("\\.");
            Object p = pp;
            for(int i=0; i<percorso.length; i++){
                    Class tClass = p.getClass();
                    String perc = percorso[i].substring(0, 1).toUpperCase() 
                                     + percorso[i].substring(1,percorso[i].length());
                    Method gs1Method = tClass.getMethod("get"+perc, new Class[] {});
                    Object ob1 = gs1Method.invoke(p, new Object[] {});
                    p = ob1;
            }
            String risultato = (String) p;
        }
            
    }
    Ovviamente ho creato i due costruttori nelle classi Persona e Indirizzo per i test.
    Ultima modifica di Macgiglio; 09-11-2013 a 15:21

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.