2014-10-19 52 views
-3

假設如果我想添加列表中的對象(指令)並從該列表順序調用? 例如如何將對象(指令)存儲在列表中並調用它?

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

回答

3

您不能在列表中存儲「說明」。你可以存儲的只有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(); 
} 
0

您可以使用界面,然後你的步驟提供具體方法:

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(); 
     } 
    } 
相關問題