Java中的完成处理程序?

我一直在为iOS编码,我对Objective-C中的块概念非常熟悉。 现在我正在利用Java for Android并试图将一些应用程序从Android转换为iOS。

我读到Java中没有完美的块相当,所以我想知道实现完成处理程序或类似工作的最佳替代方法是什么。

通常,接口类型。 如果你的处理程序没有参数和void返回类型,你可以像Rob建议的那样使用Runnable (这是一个interface )。 但是定义你自己的很简单:

 interface CompletionHandler { public void handle(String reason); } 

然后将其传递给您自己的class级:

 something.setCompletionHandler(new CompletionHandler() { @Override public void handle(String reason) { ... } }); 

在另一课:

 void setCompletionHandler(CompletionHandler h) { savedHandler = h; } 

然后通过调用方法调用它:

 savedHandler.handle("Some mysterious reason"); 

这种事情是在Java Swing和Android库中为“听众”完成的; 例如,请参阅View.OnClickListener

(PS我相信Java 8 lambdas可用于所有这些接口示例。)

你可以做runnables。 显然,块的等价物将需要使用Java 8的lambdas,但是谁知道Android支持它们之前多久(它们仍在使用JUnit 3.8)。

Android中有很多地方可以像块一样完成任务,例如:

  this.currentConditionsActivity.runOnUiThread(new Runnable() { @Override public void run() { currentConditionsActivity.onLocationChanged(...); } }); instrumentation.waitForIdleSync(); setupViewElements(); 

正如您所看到的,您必须创建一个匿名类的实例,但在大多数IDE中,通过自动填充来缓解样板的愚蠢。 这是在Android Studio中完成的,它在完成新的Runnable()之后将整个事情放入其中(如果你折叠代码,它甚至会显示类似于lambdas所具有的语法)。

所以这就是现在的状态。 没有多少人看起来……