Java中的闭包或类似的东西

4

我一直在尝试寻找一种类似于Closure的方法来在Java 1.6中使用,因为我正在为Android开发。

我想要的是(在完美的世界中),我有一个类,我们称之为“项目”。

然后我有一个这些项目的ArrayList。

ArrayList<Item> items = new ArrayList<item>;

在每个 items.get(x) 中,我想保存一个代码块,以便在调用时执行。该代码块需要在包含 ArrayList items 的类的范围内执行。
我的想法是在包含"items"的类中创建方法,并将函数名称保存在每个“item”实例中,然后使用反射调用这些方法...
我非常怀疑这可能是可能的,但这是我会找到答案的地方。
感谢您提前的任何帮助。

1
这不是一个答案,但你可能想阅读一下Jon Skeet的文章,它也涵盖了Java(Java 7之前)。 - Marvin Pinto
1个回答

11

您需要的是像这样的接口:

interface Closure{
    public void exec();
}

并为您想要的每个“闭包”代码创建一个匿名类

Closure closure = new Closure() {
    public void exec(){
        // code here
    }
}

嗯,我正试图看看这会如何运作,但我觉得自己有点慢。所以在我的Items类中,我需要定义匿名类吗?那不会将其范围限制在该Item实例之内吗? - JoeyG
如果您想在“Item”中定义匿名类,则可以更改“exec”签名以接受输入,并使用您想要传递的任何内容调用“exec”。 - Chikei
对我来说,问题就在这里。我希望这些代码块能够访问存储ArrayList的类中的变量。因此,我需要将代码定义在该类中,但保存在项目类中。我觉得我要求太多了,哈哈。 - JoeyG
好的,我有机会再次处理这个问题并且它已经解决了。我将接口设置在了自己的文件中。增加了一个“Closure”接口的变量,并将其添加到构造方法中。当创建“Item”实例时,我只是在构造函数中使用了“new Closure() {@Override public void exec(){}}”,它完美地工作了。感谢您的帮助! - JoeyG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接