如何将参数传递给匿名类?

新手上路,请多包涵

是否可以向匿名类传递参数或访问外部参数?例如:

 int myVariable = 1;

myButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // How would one access myVariable here?
    }
});

有没有什么方法可以让侦听器访问 myVariable 或传递 myVariable 而无需将侦听器创建为实际的命名类?

原文由 Lewis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 828
2 个回答

从技术上讲,不,因为匿名类不能有构造函数。

但是,类可以从包含范围引用变量。对于匿名类,这些可以是包含类的实例变量或标记为 final 的局部变量。

编辑:正如彼得指出的那样,您还可以将参数传递给匿名类的超类的构造函数。

原文由 Matthew Willis 发布,翻译遵循 CC BY-SA 2.5 许可协议

是的,通过添加一个返回“this”的初始化方法,并立即调用该方法:

 int myVariable = 1;

myButton.addActionListener(new ActionListener() {
    private int anonVar;
    public void actionPerformed(ActionEvent e) {
        // How would one access myVariable here?
        // It's now here:
        System.out.println("Initialized with value: " + anonVar);
    }
    private ActionListener init(int var){
        anonVar = var;
        return this;
    }
}.init(myVariable)  );

不需要“最终”声明。

原文由 Adam Mlodzinski 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题