假设我想在列表中添加对象(指令)并从该列表中按顺序调用? 例如
public static void main(String [] args){
List list = new ArrayList();
list.add(System.out.println("1"))
list.add(System.out.println("2"))
list.add(System.out.println("3"))
try{
for(Object i : list){
i.invoke() //....like this i want to invoke each syso
}
catch(Exception e){
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
您无法在列表中存储“说明”。所有你可以存储的是对象。但是对象有方法,你可以调用这些方法:
List<Runnable> list = new ArrayList<>();
list.add(() -> System.out.println("1"));
list.add(() -> System.out.println("2"));
list.add(() -> System.out.println("3"));
for (Runnable r : list) {
r.run();
}
以上是使用自Java 8以来可用的lambdas。但您可以在以前的版本中使用匿名类:
List<Runnable> list = new ArrayList<>();
list.add(new Runnable() {
@Override
public void run() {
System.out.println("1");
}
});
list.add(new Runnable() {
@Override
public void run() {
System.out.println("2");
}
});
list.add(new Runnable() {
@Override
public void run() {
System.out.println("3");
}
});
for (Runnable r : list) {
r.run();
}
或者您可以定义自己的打印机类:
public class Printer {
private final String toPrint;
public Printer(String toPrint) {
this.toPrint = toPrint;
}
public void print() {
System.out.println(toPrint);
}
}
List<Printer> list = new ArrayList<>();
list.add(new Printer("1"));
list.add(new Printer("2"));
list.add(new Printer("3"));
for (Printer p : list) {
p.print();
}
答案 1 :(得分:0)
您可以使用Interface,然后为您的步骤提供具体方法:
public interface Action {
void doStuff();
}
调用类
public static void main(String[] args) {
List<Action> list = new ArrayList<Action>();
list.add(new Action() {
@Override
public void doStuff() {
//Custom code for the step
}
});
//Invoke
for(Action action : list) {
action.doStuff();
}
}