所以我试图在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);
}
};
}
这样的问题的一般方法是什么?或者这只是伪劣的代码?
答案 0 :(得分:4)
this
将指向动作侦听器的匿名实例。如果要传递封闭类的this
指针,请使用<enclosingClassName>.this
。
e.g:
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 expression:
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);
};
}
}
答案 1 :(得分:0)
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);
}
};
}