AndroidLab

Il Laboratorio Italiano Android e Google Chrome

Apprendere-Java-per-programmare-Android

Nello scorso tutorial abbiamo parlato dell’istruzione condizionale if, ed abbiamo visto come Java fornisce tutti i tipici operatori condizionali che ci si possa aspettare, ivi inclusi quelli per verificare l’uguaglianza, la diversità, maggiore di, minore di, etc.


Nell’esempio che segue si verifica il valore di una variabile numerica (chiamata iVar) fornendo differente codice a seconda che il valore sia 0, negativo o positivo

1
2
3
4
5
6
7
if(iVar==0) {
    // la variabile è zero
} else if (iVar>0) {
    //  la variabile è un numero positivo
} else {
    // la variabile è un numero negativo
}

Utilizzare instanceof nelle istruzioni condizionali

Ora diamo un’occhiata ad una delle caratteristiche specifiche di Java che è possibile utilizzare anche nelle istruzioni condizionali. Poiché Java è un linguaggio completamente orientato agli oggetti, è possibile verificare se un oggetto è di un tipo specifico (vale a dire se è un’istanza di una specifica classe) utilizzando la parola chiave instanceof . La parola chiave  instanceof è un operatore booleano che restituisce come risultato vero o falso.

Vediamo un esempio veloce: supponiamo di avere una classe genitore chiamata Pesce, che ha due sottoclassi derivate: PesceAcquaSalata e PesceAcquaDolce. Potremmo usare la parola chiave instanceof per verificare se un oggetto è un’istanza di una determinata classe o sottoclasse.

1
2
3
4
5
6
7
8
9
10
PesceAcquaSalata nemo = new PesceAcquaSalata();
if(nemo instanceof Pesce) {
    // sappiamo che stiamo parlando di un Pesce
    // potrebbe essere un Pesce (classe genitore), o una sua sottoclasse come
    // PesceAcquaSalata o PesceAcquaDolce.   
 
    if(nemo instanceof PesceAcquaSalata) {
        // Nemo è un istanza di PesceAcquaSalata.
    }
}

Utilizzare instanceof nello sviluppo Android

In che modo è utile instanceof quando si parla di sviluppo Android?

Le classi del SDK Android  sono organizzate in modo tipicamente orientato agli oggetti, vale a dire gerarchicamente.

Ad esempio, le classi Button, TextViewCheckBox, che rappresentano diversi tipi di controlli dell’ interfaccia utente, sono tutte derivate dalla stessa classe genitore: View.

Pertanto, se si vuole creare un metodo che abbia come parametro un oggetto di tipo View ,ma che si  comporti differentemente a seconda del tipo di controllo, si può utilizzare instanceof per verificare il parametro in ingresso e determinare esattamente di quale tipo di controllo View si tratta.

Ad esempio, il seguente metodo accetta un parametro View, il che consente di passargli qualsiasi tipo di oggetto di tipo View, ma in particolare individua i controlli TextView per eseguire determinate azioni:

1
2
3
4
5
6
7
8
9
void verificaTextView(View v)
{
     if(v instanceof TextView)
    {
        // Questo è un controllo TextView
    } else {
        // Questo non è un controllo TextView
    }
}

In questo esempio, si potrebbe continuare facendo una chiamata ad un metodo specifico di un oggetto TextView e non di oggetto View, in questo caso, si dovrebbe effettuare  il casting del parametro View in un TextView prima di effettuare tale chiamata.

Se, invece, avessimo voluto effettuare una chiamata ad un metodo disponibile in tutti gli oggetti di tipo View, ma che funziona in modo differente negli oggetti TextView, non avremmo avuto necessita di questa verifica, sarebbe compito di Java, infatti, chiamare la versione appropriata del metodo specifico della classe TextView.

Conclusione

In questa breve lezione abbiamo imparato come usare la parola chiave instanceof per verificare in fase di esecuzione il tipo di un oggetto ed a fornire percorsi di codice in base al risultato.

Si tratta di una comoda funzione che gli sviluppatori Android utilizzano spesso  dato che l’Android SDK è organizzato gerarchicamente.

Indice

  1. Introduzione a Java
  2. La Sintassi di Java
  3. instance of – Verificare il tipo di un oggetto
  4. Gli Array

Michele Dipace

Admin di Androidlab e "Computer Addicted", ha cominciato la sua"carriera" nella metà degli anni 80 sui computer 8 bit Commodore e Sinclair passando poi al 16 bit Amiga, diventandone grande appassionato. Oggi Linux user, crede che Android sia il sistema operativo destinato ad emergere nel mercato della telefonia mobile.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInPinterestGoogle PlusYouTube

Forum Android
Diventa un blogger, scrivi un articolo