这是我的界面:

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

07-28 01:25