添加这些匿名类的最紧凑/高效/可维护的方法

时间:2014-01-08 23:39:19

标签: java

这是我的界面:

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) =>
    {
        .....
    });

或类似的东西。我不记得确切的语法......显然,实现方式会略有不同。

1 个答案:

答案 0 :(得分:3)

Java 8将具有lambda表达式,其语法与C#示例中的语法类似。

不幸的是,由于JDK 8为scheduled for release this Spring,您将不得不等待一段时间。您已经try out a snapshot release了,可以使用a tutorial