So funktionieren Callbacks
Einführung
Es gibt verschiedene Situationen, in denen Sie bei der Verwendung einer Java-API einen Callback implementieren müssen. Praktische Beispiele hierfür sind Callbacks, die über ein „ ContentObserver “ auf Inhaltsänderungen reagieren, sowie Callbacks, die Java-Schnittstellen wie „ Handler.Callback “ implementieren.
QtJenny ermöglicht die Implementierung solcher Callbacks sowohl durch die Implementierung einer Java-Schnittstelle als auch durch die Erweiterung einer Java-Klasse, je nachdem, was die jeweilige Java-API verwendet. Viele der plattformübergreifenden Java-APIs, die auch von Android bereitgestellt werden, verwenden Callbacks in Form von Schnittstellen, aber Android nutzt in manchen Situationen auch abstrakte Basisklassen – ein prominentes Beispiel hierfür ist ContentObserver.
Implementierung von Java-Schnittstellen
Das folgende Diagramm veranschaulicht die Struktur und die logische Aufteilung der verschiedenen Teile bei der Implementierung von Java-Schnittstellen in C++.
Die Funktionsweise ist wie folgt: Wir verwenden eine ` java.reflect.Proxy`, die eine Java-Schnittstelle umhüllt und Aufrufe der Schnittstellenmethoden an die generische Methode ` invoke() ` eines ` InvocationHandler` weiterleitet.
Die Schnittstelle „ InvocationHandler “ wird durch eine projektspezifische „ NativeInvocationHandler “-Klasse (die von Ihrer Anwendung bereitgestellt wird) implementiert, und diese Implementierung ruft eine native generische Aufrufmethode auf, die ebenfalls vom Projekt bereitgestellt wird. Die native Methode ruft eine generische virtuelle Funktion „ qt_invoke() “ in einer generierten C++-Klasse auf, die die Java-Schnittstelle nachbildet.
Schließlich erbt der Anwendercode im Qt-C++-Projekt diese generierte Klasse und überschreibt die darin enthaltenen virtuellen Funktionen.
Erweiterung von Java-Klassen
Das folgende Diagramm veranschaulicht die Struktur und die logische Aufteilung zwischen verschiedenen Teilen der Erweiterung von Java-Klassen in C++.
Die Funktionsweise ist wie folgt: Wir generieren eine Java-Unterklasse, die dann eine generische Methode „ invoke() “ einer „ NativeInvocationHandler “ aufruft, bei der es sich um eine vom Projekt bereitgestellte Java-Klasse handelt.
Die ` NativeInvocationHandler ` ruft eine native generische Aufrufmethode auf, die ebenfalls vom Projekt bereitgestellt wird. Die native Methode ruft eine generische virtuelle Funktion ` qt_invoke() ` in einer generierten C++-Klasse auf, die die Java-Klasse nachbildet.
Schließlich erbt der Benutzercode im Qt-C++-Projekt diese generierte Klasse und überschreibt die darin enthaltenen virtuellen Funktionen.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.