Come capire il tipo di una variabile

di Anonimizzato11492 il
7 risposte
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

  • 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");
    			}
    		}
    	}
    
    }
  • 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
    ...
    
  • Grazie mille. E se volessi la classe o l'interfaccia su cui ho costruito la classe che ottengo con getClass() ?
  • 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!
  • 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?
        }
    }
    
  • 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());
    			}
    		}
    	}
    
    }
  • Si grazie mille. Ora ho tutto ciò che mi serve!
Devi accedere o registrarti per scrivere nel forum
7 risposte