Che tipo di struttura è presente in java?

0

Stavo leggendo il seguente codice

listView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    Toast.makeText(getApplicationContext(),
      "Click ListItem Number " + position, Toast.LENGTH_LONG)
      .show();
  }
}); 

Non ricevo il tipo di struttura che abbiamo passato come argomento della funzione setOnItemClickListener e come funziona tale tipo di struttura? Se si tratta di una classe, allora perché stiamo usando () davanti al nome della classe e come verranno chiamate le funzioni di classe? Come ho detto, non so che tipo di struttura sia, quindi non so come cercarlo con le parole chiave corrette su un motore di ricerca.

    
posta sdream 21.10.2014 - 08:15
fonte

2 risposte

4

È una classe anonima .

  • setOnItemClickListener prende un'istanza del tipo OnItemClickListener
  • nella prima riga, viene creata un'istanza della classe anonima, la () è la chiamata del costruttore
  • ciò che segue all'interno di {} è il corpo della classe anonima, che in questo caso sovrascrive il metodo onItemClick di OnItemClickListener

Le classi anonime vengono utilizzate quando un'implementazione di un tipo viene utilizzata solo in un punto del sistema.

    
risposta data 21.10.2014 - 08:56
fonte
0

Questa è una classe anonima . Una caratteristica poco conosciuta di Java sono le classi locali:

public void method()
{
   class MyClass{}

   MyClass cls = new myClass();
}

Questo è permesso. Raramente lo vedi, perché in questa forma non ha alcun reale scopo e sembra solo confuso. Ma se vuoi passare un metodo per eseguire un codice, puoi anche usare una scorciatoia, dove fai una sola istanza della classe e non le dai un nome (quindi anonimo).

Come notato nei commenti, Java 8 introduce chiusure e espressioni lambda, in modo che i blocchi di codice diventino costrutti di linguaggio reali che possono essere effettivamente passati in giro. Prima di ciò, le classi anonime erano il modo per passare blocchi di codice.

    
risposta data 21.10.2014 - 08:57
fonte

Leggi altre domande sui tag