Autore Topic: Classi anonime e interfaccie  (Letto 509 volte)

Offline oberdank

  • Utente normale
  • ***
  • Post: 287
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Core LTE
  • Play Store ID:
    BuzzOne
  • Sistema operativo:
    Windows 8.1
Classi anonime e interfaccie
« il: 21 Settembre 2015, 01:07:40 CEST »
Qualcuno puo' spiegarmi che rapporto c'e' tra classi anonime e interfaccie?

Mi hanno detto che tipicamente (ma non necessariamente) le classi anonime si usano per implementare "on the fly" delle interfacce, qualcuno puo' spiegarmi meglio?
Puo' farmi degli esempi?

Offline oberdank

  • Utente normale
  • ***
  • Post: 287
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Core LTE
  • Play Store ID:
    BuzzOne
  • Sistema operativo:
    Windows 8.1
Re:Classi anonime e interfaccie
« Risposta #1 il: 22 Settembre 2015, 12:37:30 CEST »
Qualcuno puo' rispondermi?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1229
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Classi anonime e interfaccie
« Risposta #2 il: 22 Settembre 2015, 13:58:36 CEST »
Secondo il mio parere si tratta di una modalità di stesura del tuo codice.
Mettiamo caso che la mia classe Cinema abbia un metodo ".getFilmList()"

per il concetto on the fly penso sia qualcosa come List<Film> list = new Cinema().getFilmsList.

Cosi facendo non ho nessun oggetto di tipo cinema.
Comunque html.it afferma che ne viene fatto uso per la programmazione ad eventi. Il codice che secondo me fa da esempio è AsynkHttp. E' una libreria usata per le richieste http:
Codice (Java): [Seleziona]
AsyncHttpClient client = new AsyncHttpClient();
client.get("https://www.google.com", new AsyncHttpResponseHandler() {

    @Override
    public void onStart() {
        // called before request is started
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] response) {
        // called when response HTTP status is "200 OK"
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
        // called when response HTTP status is "4XX" (eg. 401, 403, 404)
    }

    @Override
    public void onRetry(int retryNo) {
        // called when request is retried
        }
});

onQualcosa() è il metodo che viene chiamato quando succede qualcosa. Ovvero quando viene scatenato un evento.
In questo caso  potevi fare: new AsynkHttpClient().get{  // body };

Offline oberdank

  • Utente normale
  • ***
  • Post: 287
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Core LTE
  • Play Store ID:
    BuzzOne
  • Sistema operativo:
    Windows 8.1
Re:Classi anonime e interfaccie
« Risposta #3 il: 24 Settembre 2015, 12:39:42 CEST »
Mettiamo che io abbia una Activity "MainActivity" con un Button "bottone", per intercettare la pressione sul
bottone si puo' scrivere

Codice (Java): [Seleziona]
bottone.setOnClickListener(new View.OnClickListener()
{  
        @Override  
        public void onClick(View arg0)
        {  
                // azioni da fare    
        }  
});

pero' si puo' anche scrivere

Codice (Java): [Seleziona]
public class MainActivity extends ActionBarActivity implements View.OnClickListener
e poi scrivere nel corpo della MainActivity

Codice (Java): [Seleziona]
    bottone.setOnClickListener(this);
e poi

Codice (Java): [Seleziona]
    @Override
    public void onClick(View arg0)
    {
        // azioni da fare
    }

i due costrutti sono equivalenti, pero' in un caso viene implementata una interfaccia e in un'altro caso la
parola chiave "implements" NON c'e'; qualcuno mi spiega questa cosa?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1229
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Classi anonime e interfaccie
« Risposta #4 il: 24 Settembre 2015, 16:36:28 CEST »
Il parametro da passare è un OnClickListener.
Ora se fai new OnClickListener stai definendo un oggetto sul momento e soprattutto tale oggetto è usato solo li. Quindi con questo modo per 3 bottoni devi fare new OnClick... 3 volte.

Se te dici ad una classe di implementare un interfaccia allora quella classe è qualcosa che estende activity ma è anche adibita ad essere OnClickListenrer. Ora siccome tu quando fai setOnClick... Devi passate come parametro un OnClickListeber passo this. This corrispondenza alla tua activity. E la tua activity è un OnItemClick....

Infatti potevi anche creare una classe Palla che implementa OnClickListener r poi passare quella classe come parametro

Offline oberdank

  • Utente normale
  • ***
  • Post: 287
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Core LTE
  • Play Store ID:
    BuzzOne
  • Sistema operativo:
    Windows 8.1
Re:Classi anonime e interfaccie
« Risposta #5 il: 24 Settembre 2015, 18:01:02 CEST »
Scusa ma non capisco, puoi spiegarti con altre parole per favore?