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

2022-08-31 07:32:00

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

int myVariable = 1;

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

有没有办法让侦听器访问 myVariable 或传递 myVariable 而不将侦听器创建为实际的命名类?


答案 1

是的,通过添加返回“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)  );

无需“最终”声明。


答案 2

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

但是,类可以引用包含作用域的变量。对于匿名类,这些可以是包含类中的实例变量,也可以是标记为 final 的局部变量。

编辑:正如彼得所指出的,你也可以把参数传递给匿名类的超类的构造函数。


推荐