Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: reflection

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315

    reflection

    Sto facendo alcuni esercizi sulle annotazioni e in uno di questi chiedeva di annotare una classe con una annotazione completa e di fare una serie di controllo. Uno di questo controlli è quello sull'incapsulamento.
    Nella classe ho inserito una variabile public che teoricamente non dovrebbe permettere l'incapsulamento (dal momento in cui non è private) ma non sono riuscito a sviluppare il metodo.

    Questa è la soluzione del manuale:
    codice:
    private static void controlloIncapsulamento(Class objectClass4, String className) throws AnnotationException, NoSuchMethodException {
            
            Field[] variabili = objectClass4.getDeclaredFields();
            
            for(Field variabile : variabili) {
                final String nomeVariabile = variabile.getName();
                final Class<?> type = variabile.getType();
                final Method setMethod = objectClass4.getDeclaredMethod("set" + capitalize(nomeVariabile), type);
                final Method getMethod = objectClass4.getDeclaredMethod("get" + capitalize(nomeVariabile));
                
                if (setMethod == null || getMethod == null || !getMethod.getReturnType().equals(type)) {
                    throw new AnnotationException("variabile " + nomeVariabile + " non incapsulata correttamente");
                }
            }
            System.out.println("controllo incapsulamento: OK \n");
        }
                
        
        
        private static String capitalize(String string) {
            return string.substring(0,  1).toUpperCase() + string.substring(1);
        }

    In tutta sincerità non ho capito assolutamente nulla della logica di funzionamento. Potete aiutarmi a capire come funziona questo metodo?

  2. #2
    Ma scusa ma nel libro prima di questo esercizio / capitolo non c'era nulla sulla Reflection ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    No, mi sono spiegato male. L'utilizzo della reflection mi è chiaro, il problema ce l'ho nella logica di funzionamento del metodo. In particolare non riesco a capire perchè ha utilizzato getDeclaretedMethod in quel modo e l'utilità di capitalize.
    Insomma non riesco a capire come faccia a stabilire se una variabile è o non è incapsulata.

  4. #4
    In quel metodo viene controllato se nella classe passata per ogni field ci siano anche i metodi get and set.
    L'uso di capitalize viene fatto in quanto per convezioni tali metodi vengono chiamati get<Variabile> dove variabile è il nome del field
    quindi il metodo capitalize non fa altro che trasformare il primo carattere del nome del field.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Ah quindi si da per scontato che se una variabile è dichiarata private automaticamente ha i metodi set e get, mentre se ha altri modificatori non ha i metodi set e get. Giusto?
    Cioè, mi è chiaro che per l'incapsulamento le variabili vanno dichiarate private e vanno definiti i metodi set e get ma non sapevo che fosse proprio la prassi.

  6. #6
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Ah quindi si da per scontato che se una variabile è dichiarata private automaticamente ha i metodi set e get,
    Assolutamente no una proprietà privata può anche non avere i metodo get set (ovviamente sarà utilizzabile solo all'interno della classe)
    Quote Originariamente inviata da newutente Visualizza il messaggio
    mentre se ha altri modificatori non ha i metodi set e get. Giusto?
    Cioè, mi è chiaro che per l'incapsulamento le variabili vanno dichiarate private e vanno definiti i metodi set e get ma non sapevo che fosse proprio la prassi.
    Anche no, per esempio potrei dichiarare la mia proprietà "protected" ed avere i get and set, in questo modo dò la possibilità alle classi dichiarate nello stesso package di accedere a tale proprietà direttamente (senza richiamare get and set) e invece dare alle altre classi la possibilità di accedervi tramite i get and set.
    Ultima modifica di francesco.muia; 05-12-2014 a 15:00

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    E' proprio questo il dubbio allora. Perchè la presenza dei metodi set e get dovrebbe verificare, almeno per come è fatto il metodo, l'incapsulamento?

  8. #8
    Questo lo sa il libro....

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Cioè l'incapsulamento è verificato nel momento in cui c'è il metodo set, c'è il metodo get e il tipo di ritorno del metodo get è lo stesso della variabile che gestisce.
    Questa cosa davvero mi sfugge. Credevo che l'incapsulamento fosse determinato dal fatto di avere tutte le variabili private.

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    L'incapsulamente consiste nel nascondere lo stato interno della classe, rendendolo accessibile solo attraverso opportuni setter/getter.

    Cosa vuole il libro da quell'esercizio, lo sa solo lui...
    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.