Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Reflection metodo obj.getMethod(...)

    Supponiamo di voler invocare tramite Reflection:
    codice:
    setColor(Color.RED);
    Ottengo il metodo:

    codice:
    Method meth = c.getClass().getMethod (method,new Class [] {Color.class()})?
    Se c è il costruttore di oggetto JFrame, ad esempio il metodo getMethod(par1, Class[]{par2}) funziona passandovi l'unico parametro par2=Color.class nella lista Class[] e il parametro pa1="setColor", tuttavia passsando Integer.class per ogni elemento della terna (r,g,b) non funziona questa procedura?
    Ultima modifica di jabjoint; 05-03-2025 a 11:52
    jabjoint

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Premesso che JFrame non ha nessun metodo setColor (né nessuna delle sue super-classi), per poter funzionare dovrebbe non solo esistere il metodo setColor, ma anche esistere nella forma setColor(int, int, int) (ovvero un override).

    Quello che, invece, esiste è un costruttore della classe Color che accetta la terna (r, g, b) per costruire un oggetto della classe Color, che eventualmente puoi passare ad un metodo come setBackground().

    Esempio (se proprio vogliamo farci del male):

    codice:
    // Tralascio tutta la gestione delle eccezioni
    // Sia c un componente (esempio un JPanel) Swing provvisto di metodo setBackground()
    
    Method m = c.getClass().getMethod("setBackground", new Class<?>[] {Color.class});
    if (m != null) {
       Constructor con = Color.class.getConstructor(int.class, int.class, int.class);
       if (con != null) {
          Color colore = (Color) con.newInstance(255, 0, 0);
          m.invoke(c, colore);
       }
    }

    PS: Attenzione che il costruttore di Color accetta tre valori primitivi interi, non tre oggetti Integer (l'auto-unboxing con la reflection non va tanto d'accordo)

    Ciao.
    Ultima modifica di LeleFT; 06-03-2025 a 17:35
    "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
    Ciao grazie della risposta, si il metodo setBackground non ha il costruttore con la terna di parametri int, int, int ma appunto accetta solo Color.
    Ci son arrivato poco dopo.
    Grazie comunque.
    jabjoint

  4. #4
    Ciao grazie della risposta, si il metodo setBackground non ha il costruttore con la terna di parametri int, int, int ma appunto accetta solo Color.
    Ci son arrivato poco dopo.
    Grazie comunque.
    jabjoint

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.