webentwicklung-frage-antwort-db.com.de

Warum funktioniert eigentlich eine geschützte Android: onClick-Methode in Activity?

Angenommen, Sie definieren Android:onClick="doClick" in Ihrer Activity als

protected void doClick(View view) { }

Die Dokumentation besagt das

Dieser Name muss einer öffentlichen Methode entsprechen, für die genau ein Parameter des Typs View verwendet wird.

Dies ist eine gegebene Anforderung der zugrunde liegenden Class.getMethod()-Methode, die nur öffentliche Methoden als documentation findet, die sie angeben

Gibt ein Method-Objekt zurück, das die angegebene öffentliche Member-Methode der Klasse oder Schnittstelle widerspiegelt, die durch dieses Class-Objekt dargestellt wird.

Wie ist es also möglich, dass diese Implementierung, die überhaupt nicht funktionieren sollte, auf einigen Geräten und Emulatoren funktioniert, während sie auf anderen, die die gleichen API-Ebenen verwenden, nicht funktioniert?

30
tynn

Ich habe die einzelnen Implementierungen debuggt. Der relevante Teil des Codes befindet sich in der Support Library mit Class.getMethod().

Wie in der Dokumentation angegeben, findet diese Methode nur öffentliche Member-Methoden und verhält sich korrekt. Aus irgendeinem Grund sind alle Modifizierer deklarierter geschützter Methoden der Activity (dies sind onCreate() und doClick()) auf 1 gesetzt, was bedeutet, dass diese tatsächlich öffentlich sind.

Ich konnte dieses Verhalten nur beim Erstellen des debug-Builds mit einem Mac beobachten. Warum dies geschieht, ist immer noch eine offene Frage, auf die ich versuche, eine Antwort zu finden.

0
tynn

Laut " The Java ™ Tutorials ": Der protected-Modifizierer gibt an, dass der Member nur innerhalb seines eigenen Pakets (wie bei package-private) und zusätzlich durch eine Unterklasse seiner Klasse in aufgerufen werden kann ein anderes paket

0
Regis