java - 定义方法数组

标签 java lambda

我正在开发一个小型图像处理程序。它有一个 GUI,我想将每个按钮绑定(bind)到不同的方法。为此,我决定创建一系列方法,但是到目前为止我还无法使其工作。我尝试过使用匿名类,但它对我不起作用。我的代码:

public class ImageProcessor {
    void blur(){
        System.out.println("blurring");
    }
    void sharpen(){
        System.out.println("sharpening");
    }
}

public class GUI {
    private ImageProcessor imager = new ImageProcessor();
    private ImageProcessor[] LAMBDAS = new ImageProcessor[]{
            public void blur(){imager.blur();}} // one of my failed attempts
    }
例如,一旦按下模糊按钮,我想将数组的第一项绑定(bind)到它,在本例中是模糊方法。任何指点将不胜感激!

最佳答案

您正在创建数组,但还必须使用 new 关键字在外大括号内创建新的 ImageProcessor 对象:

class GUI {
    private ImageProcessor imager = new ImageProcessor();
    private ImageProcessor[] LAMBDAS = new ImageProcessor[] {
            //LAMBDAS[0]
            new ImageProcessor() {
                public void blur() {
                    imager.blur();
                }
            },

            //LAMBDAS[1]
            new ImageProcessor() {
                public void blur() {
                    imager.blur();
                }
            } };
}

如果愿意,您还可以省略数组初始化语法的 new ImageProcessor[] 部分,而只使用大括号。

<小时/>

上面仅解决了导致编译器错误的语法错误。附带说明一下,事件处理程序通常不是这样绑定(bind)到源的。在这种情况下,数组对你没有帮助。例如,如果您有多个按钮使用不同的参数执行类似的事件,那么您可能需要一个数组。
但是,在您的情况下,通过添加监听器来注册事件应该足够了,而无需编译 ImageProcessor 对象数组,每个 ImageProcessor 只执行一项操作一件事(即 blur()sharpen() 等之一)。

关于java - 定义方法数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60354303/

相关文章:

java - 如何修改来自不同类的数组列表? java

Java For循环只执行一次

java - Hibernate xml 文件问题

Java 9 ifPresentOrElse 返回值

C# 关于 lambda 表达式的解释

c# - 将 Lambda 表达式声明为类常量字段

java - 如何在spring roo项目中调用.aj文件中的方法?

lambda - 如何在apollo-server-lambda中处理cookie

c# - 如何动态创建以下 LINQ 表达式?

java - 如何让所有用户都使用 ldap?