Java 将对象作为参数传递给ActionListener

Java 将对象作为参数传递给ActionListener,java,actionlistener,Java,Actionlistener,如何传递附加参数 下面是一些示例代码,试图明确我想要做什么: public class A { public static void create(String txt, ActionListener evt){ MenuItem item = new MenuItem(txt); SomeClass sample_class = new SomeClass(); // Would like to do this...

如何传递附加参数

下面是一些示例代码,试图明确我想要做什么:

public class A {

    public static void create(String txt, ActionListener evt){
        MenuItem item = new MenuItem(txt);
        SomeClass sample_class = new SomeClass();

        // Would like to do this...
        // item.addActionListener(evt, sample_class);

        item.addActionListener(evt);
    }

}

public class B {

    public static void init(){
        A.create("Test", evt -> {
            System.out.println("hi");
        });
    }

}
我想做的是传递“sample_类”,以便动作侦听器可以使用它

所以最终的结果是这样的,所以我可以在侦听器中使用我的类

A.create("Test", (evt, something) -> {
    something.do_something();
});

我已经读过很多类似的问题,但我不能就此结束我的讨论。

您可以在SomeClass中实现ActionListener,并在其中封装事件

public class A {
    public static void create(String txt, ActionListener evt){
        MenuItem item = new MenuItem(txt);
        SomeClass sample_class = new SomeClass(evt);

        item.addActionListener(sample_class);
    }    
}

public class SomeClass implements ActionListener {
    ActionListener evt;

    public SomeClass(ActionListener evt) {
        this.evt = evt;
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        this.evt.actionPerformed(ae);
    }
}

您不需要添加额外的参数,只需创建一个实现ActionListener的类,并在其中设置您喜欢的任何成员变量。有道理。我想我现在不能使用Lambda了,是吗?“我想这很诱人,如果你唯一的工具是锤子,把一切都当作钉子”——亚伯拉罕·马斯洛如果你有什么理由需要在你的代码中包含Lambda,在问题中包含这个要求没有理由,只是问问。仍在学习中,所以我想确定我是否可以将它们用于上面的解决方案。我已经实现了您的解决方案并设置了成员变量,看起来效果不错。谢谢编辑:不知道如何接受你在上述评论中的答案,但这正是我所用的,并且正在发挥作用。