函数名称为字符串

时间:2017-08-22 16:32:04

标签: java function generics java-8

我试图围绕通用和功能......我想要实现的目标:将函数名称作为字符串传递给它来执行:< / p>

我想Wrapper.useFunction("eleven")Wrapper.useFunction("ten")

public class Wrapper<T> {
    public F useFunction(Function<F, F> function) {
        return function.apply(F);
    }

    Function<F, String> ten = s -> "10";
    Function<F, String> eleven = s -> "11";
}

但是这段代码甚至没有接近编译。也许它没有任何意义。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

如果您希望能够调用一组有限的函数,我建议构建一个Map,它将字符串映射到Runnable(或类似的功能接口)的实例。然后,您的useFunction方法可以在Map中查找函数实现,并在它存在时调用它。

示例:

public class SomeClass {

    private final Map<String, Runnable> methods = new HashMap<>();
    {
        methods.put("helloworld", () -> {
            System.out.println("Hello World!");
        });
        methods.put("test", () -> {
            System.out.println("test!");
        });
        methods.put("doStuff", () -> {
            System.out.println("doStuff!");
        });
    }

    public void perform(String code) {
        methods.getOrDefault(code, 
            () -> {
                System.err.println("No such Method: "+code);
            })
        .run();
    }

}

如果你想调用任意方法,你应该使用其他人所说的反射。