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

    [java] metodo simile al cast

    ciao,

    esiste un metodo che non sia il CAST per "forzare" il tipo di una variabile e che non sia deprecato come setClass()...?

    grazie
    La vita sarebbe piu' facile se avessi il codice sorgente!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    L'unico altro modo è quello di istanziare un nuovo oggetto utilizzando, laddove predisposti, dei metodi per l'operazione.

    Data la tua domanda mi viene da chiederti: non è che la soluzione al tuo problema può risiedere nell'ereditarietà?


    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
    forse mi sono spiegato male, ti espongo tutto il mio problema...

    problema:

    io ho bisogno di creare una classe che accetti una Collection composta da n elementi di qualsiasi tipo (io non sono a conoscenza ne del tipo, ne del numero di elementi)...

    ora... siccome il contenuto della Collection devo poi andarlo a esportare in un report EXCEL... ho bisogno del tipo degli elementi contenuti in essa per formattare le celle del foglio XLS...

    Se hai/avete qualche consiglio... ben venga...

    cmq grazie per l'interessamento...
    La vita sarebbe piu' facile se avessi il codice sorgente!

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    perciò hai bisogno di conoscere il tipo di dato
    non di cambiarlo
    fai con instanceof
    if (object instanceof String)
    ...
    else if (object instanceof Number)
    ...

  5. #5
    ma funziona anche facendo una cosa di questo tipo?

    codice:
    ...
    
    Object element = i.next();
    String name = element.getClass().getName();
    Class cls = Class.forName(name);
    Object obj = cls.newInstance();
    if(obj instanceof cls)
    { ... }
    
    ...
    La vita sarebbe piu' facile se avessi il codice sorgente!

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    forse obj.getClass().getName().equals(cls.getName())
    ma non vedo l'utilità di fare un giro del genere :master:

  7. #7
    allora, partendo dal codice che ho postato prima...

    come faresti tu?

    sono un po' confuso...
    e' tutto il giorno che ci sbatto la testa... e non riesco a trovare una soluzione...
    La vita sarebbe piu' facile se avessi il codice sorgente!

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    lo avevo postato
    Originariamente inviato da floyd
    if (object instanceof String)
    ...
    else if (object instanceof Number)
    ...

  9. #9


    me l'ero perso...

    ora provo...
    La vita sarebbe piu' facile se avessi il codice sorgente!

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Esiste anche una soluzione un po' più articolata e, forse, un o' più elegante:

    Costruisci una classe per ciascun tipo di dato che ti interessa. Queste classi implementeranno un'interfaccia di questo tipo:
    codice:
    public interface TipoDato {
       public int getTipoDato();
    }
    Magari deriveranno tutte da una superclasse astratta:
    codice:
    public abstract class SuperClasse implements TipoDato {
       public static final int TIPO_1 = 0;
       public static final int TIPO_2 = 1;
       public static final int TIPO_3 = 2;
       ...
    }
    Così facendo:
    codice:
    public class PrimoTipo extends SuperClasse {
       private Tipo t
       public PrimoTipo(Tipo t) {
          this.t = t;
       }
    
       public int getTipoDato() { return TIPO_1; }
    }
    In questo modo, le recuperi dalla Collection:
    codice:
    SuperClasse s = (SuperClasse) collection.get();
    switch ( s.getTipoDato() ) {
       case TIPO_1:
       case TIPO_2:
       case TIPO_3:
       ...
    }
    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

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.