Come capire il tipo di una variabile

di il
7 risposte

Come capire il tipo di una variabile

Ciao a tutti.
Praticamente la mia domanda è questa:
definisco un vettore di object e poi faccio un ciclo sul vettore assegnando ad ogni object un tipo oggetto diverso. Se faccio un altro ciclo su questo vettore come posso capire, col codice, che oggetto sia quello nuovo sovrapposto?

Object[MAX] o; //questo è un array di oggetti inizializzati diversi(uno potrebbe essere Integer l'altro Character e così via)
for(int i=0;i<MAX;i++){
    if(o[i] == Integer){ //so che è sbagliato ma è questo che mi interessa
    //ecc..
    }
    else if(o[i] == Character){  //stessa cosa
    //ecc..
    }
}
Scusate l'ignoranza!

7 Risposte

  • Re: Come capire il tipo di una variabile

    Ciao, puoi utilizzare il metodo getClass. Ho buttato giù un esempio:
    
    public class TipoOggetti {
    	
    	public static void main(String[] args) {
    		Object[] oggetti = new Object[2];
    		oggetti[0] = new Integer(1);
    		oggetti[1] = new Character('c');
    		
    		for(int i=0; i<oggetti.length; i++) {
    			if(oggetti[i].getClass() == Integer.class) {
    				System.out.println("Oggetto "+i+ " è di tipo Integer");
    			}
    			else if(oggetti[i].getClass() == Character.class) {
    				System.out.println("Oggetto "+i+ " è di tipo Character");
    			}
    		}
    	}
    
    }
  • Re: Come capire il tipo di una variabile

    Puoi anche usare il controllo instanceof, che ti dice se un oggetto appartiene ad una classe o a una sua sottoclasse:
    
    Object o = new Integer(1);
    if (o instanceof Character) //false
    ...
    else if (o instanceof Integer) //true
    ...
    else if (o instanceof Object) //true
    ...
    
  • Re: Come capire il tipo di una variabile

    Grazie mille. E se volessi la classe o l'interfaccia su cui ho costruito la classe che ottengo con getClass() ?
  • Re: Come capire il tipo di una variabile

    Puoi usare i metodi "getSuperclass()" e "getInterfaces()".. Se ti serve conoscere queste informazioni per invocare dei metodi, comunque, puoi sfruttare il polimorfismo che è più elegante!
  • Re: Come capire il tipo di una variabile

    No ma il mio problema è che praticamente oltre a capire di che classe si tratta devo anche accedere ai campi di tale classe. Ad esempio mettiamo che io abbia una classe così:
    
    public class Punto {
        int x;
        int y;
    }
    
    dal main poi faccio così
    
    public class Esegui{
        public static void main(String[] args){
            Object[MAX] o; //inizializzato con classi differenti tra cui ci può essere la classe Punto        
            //come faccio da qui ad accedere ad x e ad y della classe punto? per esempi....
            if(o[i] instanzeof Punto) o[i].x = 10  //come lo posso fare?
        }
    }
    
  • Re: Come capire il tipo di una variabile

    Ciao, ho ritoccato l'esempio che ti ho postato prima. Vedi se trovi le risposte che cerchi.
    
    class Punto {
    	int x;
    	int y;
    
    	public Punto() {
    		this.x = 0;
    		this.y = 0;
    	}
    
    	public int getX() {
    		return this.x;
    	}
    
    	public void setX(int newX) {
    		this.x = newX;
    	}
    }
    
    public class TipoOggetti {	
    
    	public static void main(String[] args) {
    		Object[] oggetti = new Object[3];
    		oggetti[0] = new Integer(1);
    		oggetti[1] = new Punto();
    		oggetti[2] = new Character('c');
    
    		for(int i=0; i<oggetti.length; i++) {
    			if(oggetti[i] instanceof Punto) ((Punto) oggetti[i]).setX(10);
    		}
    
    		for(int i=0; i<oggetti.length; i++) {
    			if(oggetti[i].getClass() == Integer.class) {
    				System.out.println("Oggetto "+i+ " è di tipo Integer");
    			}
    			else if(oggetti[i].getClass() == Character.class) {
    				System.out.println("Oggetto "+i+ " è di tipo Character");
    			}
    			else if(oggetti[i].getClass() == Punto.class) {
    				System.out.println("Oggetto "+i+" è di tipo Punto e la sua x vale "+((Punto) oggetti[i]).getX());
    			}
    		}
    	}
    
    }
  • Re: Come capire il tipo di una variabile

    Si grazie mille. Ora ho tutto ciò che mi serve!
Devi accedere o registrarti per scrivere nel forum
7 risposte