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所具有的语法)。
所以这就是现在的状态。 没有多少人看起来……