Sie können Runnables ausführen. Offensichtlich wird das Äquivalent von Blöcken Lambdas erfordern, die in Java 8 kommen, aber wer weiß, wie lange sie noch von Android unterstützt werden (sie benutzen immer noch JUnit 3.8).
Es gibt viele Orte in Android, wo die Dinge getan werden, die wie Blöcke sind zum Beispiel:
this.currentConditionsActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
currentConditionsActivity.onLocationChanged(...);
}
});
instrumentation.waitForIdleSync();
setupViewElements();
Wie Sie sehen können, müssen Sie eine Instanz einer anonymen Klasse machen, aber in den meisten IDEs, die Dummheit des Boilerplate wird durch Autofilling erleichtert. Dies wurde in Android Studio gemacht und es stellt das Ganze nach dem Ausführen von Runnable() wieder her (und wenn du den Code foldest, zeigt es sogar eine Syntax ähnlich der, die lambdas haben wird).
Also das ist der Zustand für jetzt. Nicht so schlimm, viele scheinen es ...
In der Tat werde ich einige Parameter benötigen. Ist es möglich, die 'CompletionHandler'-Schnittstelle nur einmal zu deklarieren und dann die' handle'-Methode zu überladen, wenn ich sie überschreibe? – Guilherme
Sie würden * CompletionHandler' nur einmal deklarieren, und ja, Sie können dieselbe Syntax mehrmals mit anderem Code für 'handle' verwenden. Beachten Sie, dass Sie jedes Mal, wenn Sie dies tun, eine neue Klasse deklarieren, die CompletionHandler implementiert, aber eine anonyme Klasse ist. Wenn Sie den gleichen "handle" -Körper mehrere Male verwenden möchten, können Sie auch eine benannte Klasse deklarieren, die sie implementiert, und Sie können eine neue Instanz davon mit 'new' erstellen, z. 'setCompletionHandler (neuer CommonCompletionHandler());'. – ajb