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

    [Java] Riflessione: tipi e classi

    (Scusate il titolo oscuro, non mi viene niente per spiegare sinteticamente il problema... Gia' farlo capire per esteso e' dura!!!)

    Mettiamo di avere dichiarato:

    codice:
    JComponent componente = new JPanel();
    Se richiamassi il metodo getClass() su componente otterrei l'oggetto JPanel.class di classe Class. Per di piu', se non avessi istanziato alcun oggetto, avrei probabilmente ottenuto un NullPointerException.

    Ecco, esiste un metodo che invece di ritornare la classe dell'oggetto puntato da componente, mi ritorni il "tipo della variabile" e cioe', in pratica, JComponent.class?
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  2. #2
    up?
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    se componente è un field di una classe, puoi farlo tramite introspezione.

    classe.getField("nomecampo").getDeclaringClass().g etName

    Al volo mi viene in mente solo questo.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sinceramente non credo che il problema esista, dato che sei tu stesso a dichiarare il tipo di un oggetto sai anche già, automaticamente, di che tipo è senza doverlo chiedere alla JVM. Se è vero, infatti, che un oggetto può essere una qualunque istanza di una sua classe derivata, non potrà mai essere un oggetto di una sua classe madre.
    Se noti, infatti, tu l'hai dichiarato di tipo JComponent... hai scritto a mano il codice per la sua dichiarazione: sai già, quindi, di che tipo è.


    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
    codice:
    classe.getField("nomecampo").getDeclaringClass().getName
    Grazie. Interessante da tenere presente, ma nel mio caso non va perche' il membro e' privato.
    Inoltre viene passato come parametro a un'altra classe, quindi l'informazione sul nome e' persa: dovrei passarla come parametro, ma a questo punto passo la classe stessa. Pero' la genericita' va a farsi benedire.

    Provero' a sistemare meglio i tipi in modo che il compilatore riesca ad inferire il tipo corretto. Probabilmente dovrei ripensare meglio il meccanismo che ho usato, o scrivere qualche helper method...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Se noti, infatti, tu l'hai dichiarato di tipo JComponent... hai scritto a mano il codice per la sua dichiarazione: sai già, quindi, di che tipo è.
    Beh, quello e' un esempio. Postare tutto il papiello che ho scritto farebbe allontanare chiunque da questo post.

    Cmq, come ho detto nell'altra risposta, quasi sicuramente ho sbagliato qualcosina nel progetto dei metodi.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  7. #7
    Ieri ho avuto un'interessante scambio sul Java Forum con un utente che mi ha illuminato sul fatto che un metodo come quello che cercavo io non puo' esistere.

    Se esistesse, infatti, avrebbe una signature del tipo:

    codice:
    public tipoStatico (Object o)
    In pratica, se anche esistesse un modo per tirare fuori il tipo statico a run-time, nel chiamare il metodo l'informazione andrebbe necessariamente perduta!
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

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.