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