Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Classe che rappresenta il metodo in esecuzione

    Non esiste un modo semplice per ottenere un oggetto di tipo Method che rappresenti il metodo in esecuzione?
    L'unico modo che trovo per ottenerlo è
    codice:
    public String methodName(Object obj1, Object obj2) {
     this.getClass().getMethod("methodName", {obj1.getClass(), obj2.getClass()});
    }
    Mi sembra un po' inutilmente complicato...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Classe che rappresenta il metodo in esecuzione

    Originariamente inviato da luca200
    Non esiste un modo semplice per ottenere un oggetto di tipo Method che rappresenti il metodo in esecuzione?
    Non credo che si possa fare.

    Originariamente inviato da luca200
    L'unico modo che trovo per ottenerlo è
    codice:
    public String methodName(Object obj1, Object obj2) {
     this.getClass().getMethod("methodName", {obj1.getClass(), obj2.getClass()});
    }
    Mi sembra un po' inutilmente complicato...
    Tramite reflection si può certamente ottenere un oggetto Method.

    Ma il tuo codice, tra l'altro, è sbagliato. Innanzitutto a livello di sintassi non puoi semplicemente mettere come argomento { ..... }. Si deve creare un array "anonimo":

    new Class[] { ...... }

    Poi comunque è anche sbagliato concettualmente: se fai obj1.getClass() ottieni la classe reale dell'oggetto passato. Metti che passi 2 String al metodo, ottieni che le classi sono appunto String e String. Ma il metodo ha come signature Object, Object, quindi non lo troverai mai!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120

    Re: Re: Classe che rappresenta il metodo in esecuzione

    Originariamente inviato da andbin
    Ma il tuo codice, tra l'altro, è sbagliato. Innanzitutto a livello di sintassi non puoi semplicemente mettere come argomento { ..... }. Si deve creare un array "anonimo":

    new Class[] { ...... }

    Poi comunque è anche sbagliato concettualmente: se fai obj1.getClass() ottieni la classe reale dell'oggetto passato. Metti che passi 2 String al metodo, ottieni che le classi sono appunto String e String. Ma il metodo ha come signature Object, Object, quindi non lo troverai mai!
    Il codice l'ho buttato lì in fretta per far capire cosa intendevo.
    Comunque, mi sembra strano che sia come tu dici: allora se un metodo dichiara un'interfaccia non posso trovarlo mai?!?!

    La documentazione dice questo:
    Let C be the class represented by this object:

    1. C is searched for any matching methods. If no matching method is found, the algorithm of step 1 is invoked recursively on the superclass of C.
    2. If no method was found in step 1 above, the superinterfaces of C are searched for a matching method. If any such method is found, it is reflected.
    Edit
    Mi sa che la roba che ho postato qui sopra non c'entra una mazza.
    Bisognerà che rifaccia una pensata

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Questo è il modo corretto:
    codice:
    public void unMetodo (Object obj1, Object obj2)
    {
        try
        {
            Method m = this.getClass().getMethod("unMetodo", new Class[] { Object.class, Object.class });
        }
        catch (NoSuchMethodException e)
        {
            // in teoria non dovrebbe succedere
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da andbin
    Questo è il modo corretto:
    Mi piace già di più

    Thanks!!!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da luca200
    Mi piace già di più
    Comunque dovresti spiegare meglio cosa vorresti fare. Cioè ... perché avresti bisogno di un Method dello stesso metodo in cui sei dentro??

    EDIT: se ti interessa, puoi sapere il nome del metodo in cui sei tramite lo stack-trace. Questo sì, è possibile da Java 1.4+
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da andbin
    Comunque dovresti spiegare meglio cosa vorresti fare. Cioè ... perché avresti bisogno di un Method dello stesso metodo in cui sei dentro??
    Mi serve come parametro da passare ad un altro metodo chiamato.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da luca200
    Mi serve come parametro da passare ad un altro metodo chiamato.
    Per fare cosa???
    È forse per avere un meccanismo di "callback"?? Allora usa le interfacce.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.