Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    Possibile utilizzo delle reflection ?

    Ciao a tutti!!!
    ho un problema ( che adesso vado a descrivere ) e, leggendo su internet credo che lo strumento che fa al caso mio sia la Reflection. Il problema è questo:

    Ho una variabile. In base al valore di questa variabile devo andare a richiamare dei metodi su di un oggetto esempio:

    switch( miaVar ){
    case 1:
    oggetto.metodo1(); break;
    case 2:
    oggetto.metodo2(); brerak;

    etc
    }

    Quindi ad ogni case vado a richiamare un metodo diverso sull'oggetto "oggetto". Potrebbero le reflection venirmi in soccorso? Ad esempio vado a vedere il valore della variabile e a prendere i metodi che mi interessano sull'oggetto "oggetto" e poi scelgo quello adeguato?

    Ora l'ho spiegato in maniera molto veloce, comunque potrebbe essere una buona tecnica ?
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Se la cosa è esattamente come l'hai descritta non hai nemmeno bisogno della reflection. La tua variabile "oggetto", sarà di un qualche tipo. Ti basta il cast:

    codice:
    switch( tuaVar ) {
       case 0:
          ((Tipo1) oggetto).metodo1();
          break;
    
       case 1:
          ((Tipo2) oggetto).metodo2();
          break;
    
       ...
    }
    Se la cosa è più complessa, cerca di spiegarla bene.


    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

  3. #3
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    siccome lo switch conterebbe di 80 o piu case.. cercavo appunto un modo per richiamare i metodi in maniera dinamica per evitare di fare uno switch kilometrico...
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Poker1
    siccome lo switch conterebbe di 80 o piu case.. cercavo appunto un modo per richiamare i metodi in maniera dinamica per evitare di fare uno switch kilometrico...
    Ok, quindi le cose sono diverse.
    La soluzione migliore consiste nel far implementare all'oggetto una interfaccia che ciascuna classe concreta dovrà poi definire.

    In questo modo, richiami semplicemente il metodo esposto dall'interfaccia.

    Non vedo dove possa esserti più utile la reflection: tramite reflection otterresti l'elenco dei metodi esposti dall'oggetto... e poi? Quale invochi?


    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

  5. #5
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    eh no infatti Poi dovevo pensare quale richiamare e il come
    Leggendo credevo potesse essere la soluzione al mio problema. Quindi.. con queste reflection cosa ci si fa??
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  6. #6
    Io una volta l'avevo usata per settare le proprietà di un bean che non aveva n metodi get e set ma solo un get e un set che prendevano in input il nome del campo da utilizzare.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Poker1
    Quindi.. con queste reflection cosa ci si fa??
    Altre cose... hai presente quando, nel tuo IDE, premi il punto e ti compare una finestra con tutti i metodi esposti da quell'oggetto? Ecco... Reflection. Ma è solo un esempio.

    Tornando al tuo problema, credo che l'uso di un'interfaccia sia più che sufficiente. Un esempio banale:

    codice:
    public interface MiaInterfaccia {
       void mioMetodo();
    }
    Creo tante classi che implementano questa interfaccia:
    codice:
    public class Classe1 implements MiaInterfaccia {
       ...
       public void mioMetodo() { /* implementazione specifica del metodo */ }
    }
    
    public class Classe2 implements MiaInterfaccia {
       ...
       public void mioMetodo() { /* implementazione specifica del metodo */ }
    }
    ...
    Ora, nel tuo metodo che "dovrebbe" contenere lo switch, quello switch non ti serve più:

    codice:
    public void tuoMetodo() {
    
       // Ottieni l'oggetto
       MiaInterfaccia oggetto = ...;
    
       // Ne richiami il metodo (e non ti interessa sapere di che tipo è)
       oggetto.mioMetodo();
       ...
    }
    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

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.