这是我的界面:
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) =>
{
.....
});
或类似的东西。我不记得确切的语法...而且显然实现会略有不同。
最佳答案
Java 8将具有lambda表达式,其语法与您的C#示例中的语法相似。
不幸的是,由于JDK 8为scheduled for release this Spring,您将不得不稍等片刻。您已经可以try out a snapshot release并使用a tutorial。