Java:是否可以制作一组方法或任何类似的方法?

时间:2015-02-08 14:58:23

标签: java for-loop methods set

我想创建一个循环,它读取现在要运行的方法并执行它们。我想过制作类似的东西:

set.add(milk());  set.add(doSomething());  set.add(count()); 

for(Iterator i = set.begining(); i!= set.end(); ++i){
*i; //do the method on "i"
}

(我还不知道java中的集合的实现,只有c ++)

我需要它,因为执行的方法会在游戏过程中改变很多时间,我想避免使用#34;如果""和代码混乱

2 个答案:

答案 0 :(得分:3)

将您的每个方法定义为Runnnable,然后将它们添加到数组中,并为每个方法调用run()进行迭代。

Runnable addMilk = new Runnable() {
  @Override
  public void run() { System.out.println("adding milk");
}
}

使用新的Java 8 Lambda运算符

可以使用更短的表示法
Runnable addMilk = () -> { System.out.println("adding milk"); };

如果您想要返回值

,还有Callable

答案 1 :(得分:1)

Java为接口Runnable提供了允许将功能作为对象传递的方法run()。 (任何其他接口也可以允许这样,但Runnable是Java中的标准)。你可以这样做:

final HashSet<Runnable> set = new HashSet<>();
set.add(new Runnable() {
    public void run() {
        milk(); //will execute milk()
    }
});
set.add(new Runnable() {
    public void run() {
        doSomething(); //will execute doSomething()
    }
});
// and so on

for(Runnable r : set) {
    r.run(); //will execute each Runnable in the set
}

此方法创建实现Runnable及其run()方法的匿名类。将调用集合中每个run()实现的Runnable方法,并且在这些run()方法中,您可以执行任何操作。在这种情况下,您只需调用另一个函数。

请参阅匿名类的this documentation。有一种更简单的符号lambda-expressions。但是如果你刚刚学习Java,你首先应该学习匿名课程。


更新:为了准确删除牛奶的Runnable,您可以这样做:

final HashSet<Runnable> set = new HashSet<>();
//store the runnable in variable so that we know which runnable to remove afterwards
final Runnable milk = new Runnable() {
    public void run() {
        milk(); //will execute milk()
    }
};
//add the runnable as usual
set.add(milk);
//add some other runnables
set.add(new Runnable() {
    public void run() {
        doSomething(); //will execute doSomething()
    }
});
// and so on

for(Runnable r : set) {
    r.run(); //will execute each Runnable in the set
}
set.remove(milk); //remove the Runnable we created first