Ich gehe den Android-Code auf der Kamera durchTutorial. Ich komme aus einem C # / Obj-C / Swift-Sprachpaket, daher ist Java für mich immer noch neu. Ich bin mit funktionaler Programmierung vertraut, aber diese Syntax, die ich sehe, scheint nicht funktional zu sein (oder vielleicht irre ich mich).
Dies ist der Code:
button.setOnClickListener
(
new View.OnClickListener()
{
@Override
public void onClick(View v)
{
}
}
);
Die Linie new View.OnClickListener()
ist, woran ich festhalte. OnClickListener ist ein Interface. Meine Frage lautet also: erstellt der neue View.OnClickListener () ein anonymes Objekt mit der OnClickListener-Schnittstelle und überschreibt die onClickView?
P.S. Wenn Sie mir auch den Java-Namen für diesen "Typ" -Code geben könnten, würde ich mich auch darüber freuen.
Antworten:
1 für die Antwort № 1Wie Sie vermutet haben, der Anruf an new View.OnClickListener() {...}
instanziiert ein Objekt eines anonymen Typs, das implementiert wird View.OnClickListener
. Der Name dieser Klasse wird durch den Namen der Klasse bestimmt umgebende Klasseund wird die Form annehmen SurroundingClass$index
. Also, wenn dies die erste anonyme innere Klasse ist MyClass
wird es genannt MyClass$1
.
1 für die Antwort № 2
Ja, es wird eine anonyme Klasse erstellt, die die Methode implementiert hat. Überprüfen Sie dies heraus: Anonyme Klassen Oracle