2014-01-08 49 views
2

下面的方法是我的接口:大多數緊湊型/高效/維護添加這些匿名類

import java.util.ArrayList; 

public abstract class Function 
{ 
    private String name; 
    private String result; 
    public Function(String name, String result) 
    { 
     this.name = name; 
     this.result = result; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public String getResult() 
    { 
     return result; 
    } 

    public abstract Thing execute(Cheesepuff cheesepuff, int line, ArrayList<Thing> arguments) throws CheesepuffException; 
} 

而且目前我有一個整體文件的完整這些聲明:

addDefaultFunction(functions, 
     new Function("get", "Gets the variable named by arg1.") 
     { 
      @Override 
      public Thing execute(Cheesepuff cheesepuff, int line, ArrayList<Thing> arguments) throws CheesepuffException 
      { 
       assertMinimumArguments(1, arguments, line, this); 
       assertNotNull(arguments.get(0), 1, line, this);     

       return cheesepuff.getVariable(arguments.get(0).getString(line));       
      }    
     }); 

是否有更緊湊的方式來做到這一點?不是可以接受的答案。看起來好像有很多額外的代碼增加了它的膨脹。

在C#中,例如,你可以這樣做:

addDefaultFunction(functions, "get", "Gets the variable named by arg1.", 
    (Cheesepuff cheesepuff, int line, List<Thing> arguments) => 
    { 
     ..... 
    }); 

或者類似的東西。我不記得確切的語法......顯然實現會稍有不同。

回答