繁体   English   中英

在actionlistener内部的构造函数中传递当前类

[英]Passing current class in constructor, inside actionlistener

所以我试图在actionlistner的构造函数中传递当前类

这样的东西

    public ActionListener createTaskListener() {
        return new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                CreateTask ct = new CreateTask();
                CreateTaskController ctc = new CreateTaskController(ct, mod.getAssessments(), this); 
                // but it says anonymous actionlistener 
                ctc.loadDataToTaskView();
                ct.setVisible(true);
            }
        };

    }

解决此类问题的一般方法是什么? 还是这只是伪劣代码?

this将指向动作侦听器的匿名实例。 如果要传递封闭类的this指针,请使用<enclosingClassName>.this

例如:

class MyClass {
    public ActionListener createTaskListener() {
        return new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                ...
                CreateTaskController ctc = 
                    new CreateTaskController(ct, mod.getAssessments(), MyClass.this); // <-
                ...
            }

        };

    }
}

作为旁注。 ActionListener是一个功能接口。 因此,您可以使用lambda表达式简化代码:

class MyClass {
    public ActionListener createTaskListener() {
        return ae -> {
            CreateTask ct = new CreateTask();
            CreateTaskController ctc = 
                new CreateTaskController(ct, mod.getAssessments(), MyClass.this);

            ctc.loadDataToTaskView();
            ct.setVisible(true);
        };    
    }
}

内部类中的this引用内部类实例。 要引用封闭的类实例,可以使用OuterclassName.this

例如

public ActionListener createTaskListener() {
    return new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            CreateTask ct = new CreateTask();
            CreateTaskController ctc = new CreateTaskController(ct, mod.getAssessments(), YourClassName.this);
            // but it says anonymous actionlistener
            ctc.loadDataToTaskView();
            ct.setVisible(true);
        }
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM