Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [JAVA] metodo invoke

  1. #1

    [JAVA] metodo invoke

    Salve a tutti,
    ho un problema con l'utilizzo del metodo invoke. Finchè si conosce il metodo e i parametri da invocare è tutto ok.
    Il problema sorge proprio qui, come faccio a invocare un metodo di cui non so il nome, ne il numero e il tipo dei parametri? Per il nome non c'è problema, ma per i parametri non so cosa inventarmi.

    Grazie

    (se necessita posto il codice)

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Domanda alquanto strana.
    Se non conosci il nome del metodo, cosa vuoi invocare?
    Cosa diversa è se si conosce almeno il nome del metodo. Se non si conoscono i tipi e/o il numero dei parametri si può sempre ottenere una lista dei metodi con quel nome e vedere cosa si può fare, ma anche qui, che senso ha? Se voglio invocare un metodo che richiede dei parametri significa che ho dei "valori" da passare... quindi saprò anche che metodo cercare: un metodo che accetti i tipi dei valori che ho.

    Altrimenti il discorso non ha nessun senso e si ricade nella fantaprogrammazione.


    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
    Mi sarei dovuto spiegare meglio. Supponiamo che con le reflection debba interrogare una classe. Di questa classe conosci solo il nome.
    Puoi recuperare i nomi dei metodi di quella classe in questo modo

    codice:
     
    Class myClass = Class.forName("NomeClasse");
    Object myObj = myClass.newInstance();
    Method methodsList[] = myClass.getDeclaredMethods();
    Fatto questo, puoi recuperare il nome di ciascun metodo facendo una semplice scansione dell'array

    codice:
     
    for(int i = 0; i < methodsList.length; i++) {
        Method myMethod = methodsList[i];
    }
    Ora non resta che chiamare il metodo invoke e il gioco sembra fatto


    codice:
     
    for(int i = 0; i < methodsList.length; i++) {
        Method myMethod = methodsList[i];
        myMethod.invoke(myObj, parameterType);
    }
    Il problema nasce proprio su come recuperare il parameterType. Se il metodo non ha parametri basta semplicemente

    codice:
     myMethod.invoke(myObj);
    ma se sono uno o più di uno ti serve sapere il tipo. Ad esempio se il parametro che passi al metodo è di tipo String allora sarà

    codice:
     
    myMethod.invoke(myObj, "qwerty");
    codice:
     
    myMethod.invoke(myObj, new String("qwerty"));
    Ho impostato meglio il problema?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Ok. Per ottenere l'elenco dei tipi di parametro è sufficiente invocare il metodo getParameterTypes() sull'oggetto Method che vuoi invocare:

    codice:
    Class<?>[] parametri = myMethod.getParameterTypes();
    Questo metodo ritorna un array di oggetti Class che rappresentano, ciascuno, la classe del tipo del parametro preteso dal metodo. Gli oggetti Class sono ritornati nell'ordine preciso con cui devono essere passati al metodo. Il metodo può ritornare un array di lunghezza 0 se il metodo non riceve alcun parametro.

    La cosa è un po' più complessa se il metodo è generico.

    Spero di aver risposto alla domanda.


    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
    si si grazie mille

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.