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

    Risalire alla classe di un oggetto dopo conversione in Object

    Ho usato la classe LinkedList per poter inserire un insieme di oggetti di 3 diversi tipi in un'unica coda, adesso però in fase di recupero dell'oggetto devo poter sapere di che tipo è ogniuno di essi, purtroppo però la classe mi restituisce solamente Object, come faccio a sapere in realtà di che tipo si tratti per poter poi fare il corretto casting?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Esiste l'operatore instanceof:
    codice:
    Object a = tuaLista.get(...);
    
    if (a instanceof Classe1) {
       Classe1 cl = (Classe1) a;
    }
    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
    ok grazie, e se invece avessi utilizzato questo costrutto:
    codice:
    Object a = lista.get(...);
    if (a.getClass() == Classe1.class)
       (Classe1) a;
    Avrebbe funzionato allo stesso modo?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì.

    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 andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da panella.e
    Avrebbe funzionato allo stesso modo?
    Come già detto da LeleFT, è corretto. E io aggiungo che in tal caso il test è molto più "stretto" rispetto a instanceof, perché confronti esattamente la classe dell'oggetto. instanceof invece si basa sul polimorfismo, in pratica il risultato è true solo se l'oggetto può essere visto come un certo tipo XYZ (quindi è-un XYZ), non se è esattamente della classe XYZ.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da andbin
    Come già detto da LeleFT, è corretto. E io aggiungo che in tal caso il test è molto più "stretto" rispetto a instanceof, perché confronti esattamente la classe dell'oggetto. instanceof invece si basa sul polimorfismo, in pratica il risultato è true solo se l'oggetto può essere visto come un certo tipo XYZ (quindi è-un XYZ), non se è esattamente della classe XYZ.
    Precisamente.
    Un breve esempio chiarificatore:
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class Istanza {
       public static void main(String[] args) {
          Object txt = new JTextField();
    
          System.out.println("\n-- Test con getClass() --\n");
    
          System.out.println("Confronto con JTextField: " + (txt.getClass() == JTextField.class));
          System.out.println("Confronto con JComponent: " + (txt.getClass() == JComponent.class));
          System.out.println("Confronto con Component: " + (txt.getClass() == Component.class));
    
          System.out.println("\n\n-- Test con instanceof --\n");
    
          System.out.println("Confronto con JTextField: " + (txt instanceof JTextField));
          System.out.println("Confronto con JComponent: " + (txt instanceof JComponent));
          System.out.println("Confronto con Component: " + (txt instanceof Component));
       }
    }
    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

  7. #7
    Grazie a tutti, è chiarissimo adesso, la mia preoccupazione era solo che una volta che un oggetto veniva trasformato in Object non fossi più in grado di risalire al tipo originale, invece fortunatamente non è così, grazie ancora.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.