Istanza di View.OnClickListener

di il
3 risposte

Istanza di View.OnClickListener

Buon giorno a tutti,
per creare un gestore d'evento procedo, come indicato in tutti i testi, guide, ecc...., con il seguente codice:
View.OnClickListener myListener=new View.OnClickListener(){
 		public void onClick(View v) {
 			.......
 		}
 	};
Secondo l'Android API, OnClickListener è un'interfaccia, per la precisione una nested interface....appunto View.OnClickListener.
Facendo new View.OnClickListener() istanzio un'interfaccia.....ma le interfacce non possono essere istanziate...o no?

3 Risposte

  • Re: Istanza di View.OnClickListener

    Ciao! In quel modo crei una classe anonima (o meglio, un oggetto di una classe anonima), ovvero una classe senza nome (che quindi non potrai riusare altrove)..è un modo veloce per creare un oggetto senza stare a definire la classe, ed è molto usato nell'ambito dei listener!


    Sent from my iPhone using Tapatalk
  • Re: Istanza di View.OnClickListener

    Ok...però View.OnClickListener resta sempre un'interfaccia e Java non permette di istanziare le interfacce, quindi non capisco perchè sia permesso scrivere:
    View.OnClickListener myListener=new View.OnClickListener(){
          public void onClick(View v) {
             .......
          }
       };
  • Re: Istanza di View.OnClickListener

    Ribadisco il concetto: con quel codice non vai ad istanziare un'interfaccia (questa cosa non avrebbe senso) ma un oggetto di una classe anonima.

    In sostanza il codice che hai scritto tu equivale al seguente:
    
    public class ClasseTemporanea implements View.OnClickListener {
    
        @Override
        public void onClick(View v) {
            ....
        }
    }
    
    Poiché, però, effettivamente non esiste nessuna classe chiamata "ClasseTemporanea" allora non potrai fare una cosa del tipo:
    
    ClasseTemporanea obj = new ClasseTemporanea();
    
    Per lo stesso motivo una classe anonima non ha un costruttore.

    Qual è quindi il vantaggio di usare una classe anonima? Semplicemente se hai necessità di creare un oggetto che sai che non dovrai riutilizzare in seguito allora ti risparmi di dover creare una nuova classe (che sai già che userai per creare uno e un solo oggetto).
    Questa cosa è particolarmente utile quando hai a che fare, ad esempio, con i listeners: in particolare il listener che andrai a creare per un componente (es un button) non dovrai utilizzarlo per altri componenti, per cui invece di andarti a creare una "classe normale" puoi velocizzare le cose andando a creare un oggetto di una classe anonima.

    Su wikipedia: .
    Oppure dal sito ufficiale di Java (in inglese): http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
Devi accedere o registrarti per scrivere nel forum
3 risposte