gpt4 book ai didi

java - 将方法实现作为参数发送

转载 作者:行者123 更新时间:2023-12-02 12:48:24 25 4
gpt4 key购买 nike

好吧,我正在开发这个库,我需要用户能够实现他自己的渲染方法的实现,如果“默认”不令人满意,我该怎么做?

我知道可以在 JavaScript 中发送函数,并且我认为我需要在 Java 中使用类似的构造..

我一直在考虑 lambda 和 Java 的 Method 类..

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

最佳答案

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

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"
}

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

关于java - 将方法实现作为参数发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com