如何将对象(指令)存储在列表中并调用它?
问题描述:
假设如果我想添加列表中的对象(指令)并从该列表顺序调用? 例如如何将对象(指令)存储在列表中并调用它?
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();
}
}
}
答
您不能在列表中存储“说明”。你可以存储的只有Objects。但对象有方法,你可以调用这些方法:
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();
}
以上是使用lambda表达式,可自从Java 8.但是你可以在以前的版本中使用匿名类来代替:
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();
}
答
您可以使用界面,然后你的步骤提供具体方法:
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();
}
}
你的代码绝对不是Java(也许你的意思是JavaScript的?) – msrd0 2014-10-19 10:40:59