ObjectiveC阻止Java等价物

Fab*_* B. 17 java objective-c-blocks

Apple Objective-C语言的一个特性对我来说非常有用:我可以将代码块作为方法中的参数传递.

我也想用Java做到这一点.就像是:

myManager.doSomethingInTransaction(function() {
   dao.save();  
});
Run Code Online (Sandbox Code Playgroud)

因此myManager对象将在startTransaction()和endTransaction()方法之间执行我的代码.

有没有办法在Java中获得它?

Tay*_*mon 41

不幸的是,Java不支持这一点.但是您可以使用匿名类获得类似的功能.

为此,首先定义一个接口:

interface TransactionAction {
    public void perform();
}
Run Code Online (Sandbox Code Playgroud)

doSomethingInTransaction然后应该定义TransactionAction为一个参数.

然后,当你调用它时,执行以下操作:

myManager.doSomethingInTransaction(new TransactionAction() {
    public void perform() {
        dao.save();
    }
});
Run Code Online (Sandbox Code Playgroud)


Gui*_*let 12

这还不存在于Java(尚)中.解决方法是使用Runnable界面:

myManager.doSomethingInTransaction(new Runnable() {
    public void run() {
        dao.save();  
    }
});
Run Code Online (Sandbox Code Playgroud)

或任何具有单一方法的界面都可以.