2 Stimmen

Frage zur Java-Syntax

Ist dieser Code instanziieren ein SectionedAdapter-Objekt und überschreiben getHeaderView in einer Zeile?

SectionedAdapter tagSectionedAdapter=new SectionedAdapter() {
    protected View getHeaderView(String caption, int index,
                                    View convertView,
                                    ViewGroup parent) {
        TextView result=(TextView)convertView;

        if (convertView==null) {
            result=(TextView)getLayoutInflater()
            .inflate(R.layout.tag_listview_header, null);
        }

        result.setText(caption);

        return(result);
    }
};

3voto

Mike Daniels Punkte 8472

Ja, Sie haben Recht. Das nennt man eine anonyme innere Klasse . Die Klasse ist zwar definiert, hat aber keinen Namen. ( SectionedAdapter ist eigentlich der Supertyp der anonymen Klasse).

2voto

Jonathon Faust Punkte 12196

Es ist die Deklaration einer Klasse und die Überschreibung einer Methode.

Es ist vergleichbar mit der Deklaration einer Klasse wie dieser:

class MySectionedAdapter extends SectionedAdapter
{
   @Override
   protected View getHeaderView(...)
   {
      ...
   }
}

Und dann diese Klasse instanziieren:

SectionedAdapter tagSectionedAdapter = new MySectionedAdapter();

Es ist eine anonyme innere Klasse - kein Name und eine etwas andere Syntax. Sie wird verwendet, wenn Sie in bestimmten Situationen nur eine bestimmte Instanz einer Klasse benötigen. Zum Beispiel werden Vergleichsklassen oft auf diese Weise implementiert und an Sortierfunktionen übergeben.

Die Klasse, die Sie implementieren, kann in Wirklichkeit eine Schnittstelle und gar keine Klasse sein, wie im Fall von Runnable .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X