如何将对象(指令)存储在列表中并调用它?

问题描述:

假设如果我想添加列表中的对象(指令)并从该列表顺序调用? 例如如何将对象(指令)存储在列表中并调用它?

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

你的代码绝对不是Java(也许你的意思是JavaScript的?) – msrd0 2014-10-19 10:40:59

您不能在列表中存储“说明”。你可以存储的只有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(); 
     } 
    }