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

新手上路,请多包涵

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

 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 许可协议

阅读 747
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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题