Java 将方法实现作为参数发送

Java 将方法实现作为参数发送,java,methods,reflection,lambda,Java,Methods,Reflection,Lambda,好的,我正在开发这个库,在这里我需要用户能够实现他自己的渲染方法实现,如果默认值不令人满意,我将如何做到这一点 我知道可以用JavaScript发送函数,我想我需要一个类似的Java结构 我一直在考虑lambdas和Java的方法类 你们认为我的最佳选择是什么 如果我正确理解了你的问题,你会想要一个系统,在这个系统中,使用你的库的人可以通过某种方式用自己的实现覆盖默认算法。这可能看起来像这样: public class Renderer{ // Declare an interface

好的,我正在开发这个库,在这里我需要用户能够实现他自己的渲染方法实现,如果默认值不令人满意,我将如何做到这一点

我知道可以用JavaScript发送函数,我想我需要一个类似的Java结构

我一直在考虑lambdas和Java的方法类


你们认为我的最佳选择是什么

如果我正确理解了你的问题,你会想要一个系统,在这个系统中,使用你的库的人可以通过某种方式用自己的实现覆盖默认算法。这可能看起来像这样:

public class Renderer{
    // Declare an interface which specifies a single method that handles rendering
    public interface RenderHandler{ void render(float f, float f1); }

    // Declare a default implementation that is created with each instance of the Renderer
    protected RenderHandler handler = (f, f1) -> { System.out.println("Replace me!"); };

    // Define a system of replacement for the rendering routine
    public void replaceHandler(RenderHandler replacement){
        if(replacement!=null) handler = replacement; // Determine a viable replacement
    }

    // This shows that the same method can be called but yield different results
    // based on how the RenderHandler object in the "handler" field is implemented
    public void handleRender(float f, float f1){ handler.render(f, f1); }
}
现在,此示例将允许库的用户使用自定义实现调用replaceHandler,以替换Renderer对象附带的默认实现。例如:

public static void main(String[] args){
    Renderer r = new Renderer();                              // Create Renderer object
    r.handleRender(1f, 2f);                                   // Prints "Replace me!"
    r.replaceHandler((f, f1)->{ System.out.println(f*f1); }); // Lambda implementation
    r.handleRender(1f, 2f);                                   // Prints "2"
}

如您所见,替换的实际实现由使用您的库的人员处理,默认实现除外。因此,您不必担心它是如何实现的,只要在请求替换的情况下,它是真正实现的。这意味着,如果要支持自定义渲染例程的选项,可以通过使用适当的方法定义接口来实现,只需实现一个默认接口,并允许使用第一个代码示例中演示的方法进行替换。

要遵循有关Lambda的指南,它们正是您想要的。旧的方法是传递实例以执行它,这基本上就是lambda将要做的