Java将lambda作为带有属性的参数传递

时间:2014-12-18 20:15:19

标签: java interface lambda

我正在尝试创建一个包含两个部分的对象,一个字符串和一个方法。为了处理这个问题,我希望用户能够添加(实例)或添加(字符串,lambda)。

我理解它的方式,我不能使用接口,因为它们没有公共属性(非静态),我不能使用类,因为那时我不能将它作为参数传递而我无法通过接口然后直接调用该方法,因为这将是不好的做法。

那么如何/最好的方法是什么?

EG:

interface IFoo {
    void DoBar();
}

class Foo implmenets IFoo {
    public string Bar;
}

EG add:

void addFoo(Foo foo) {
     this.foos.add(foo);
}

void addFoo(String bar, IFoo foo) {
    foo.Bar = bar;
    this.foos.add(foo);
}

EG用法:

addFoo("yes", () -> {
    //some code
});
编辑:我目前的解决方案,感觉这是不好的做法,但这是我能想到的最好的,直到别人有更好的想法。

接口(供Lambda使用)

@FunctionalInterface
public interface ICommand
{
    void processCommand(CommandArgument[] args);
}

类(用于实例化)

public abstract class Command implements ICommand
{
    public String command = "";

    public abstract void processCommand(CommandArgument[] args);
}

添加方法

public void addCommand(String commandName, ICommand action) {
    Command command = new Command() {
        @Override
        public void processCommand(CommandArgument[] args) {
            action.processCommand(args);
        }
    };
    command.command = commandName;

    this.addCommand(command);
}

用法:

CommandHandler handler = new CommandHandler();
handler.addCommand("quit", (CommandArgument[] args) -> System.exit(0));

0 个答案:

没有答案