定义嵌套类时,是否可以访问“外部”类的方法?我知道可以访问它的属性,但我似乎找不到使用它的方法的方法。
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && //<-- Here I'd like to
} // reference a method
}); //from the class where
//addMouseListener() is defined!
由于
答案 0 :(得分:4)
由于你的内部类是非静态的,所以外部类的所有方法都会自动对内部类可见,甚至是私有的。
因此,请继续调用您想要的方法。
例如,
class MyClass extends JPanel
{
void doStuff()
{
}
boolean someLogic()
{
return 1>2;
}
void setupUI()
{
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && someLogic())
doStuff();
}
});
}
}
有关详情,请参阅Sun Tutorial on Nested Classes。
答案 1 :(得分:3)
在内部类中使用外部类引用还有另一种技巧,我经常使用它:
class OuterClass extends JFrame {
private boolean methodName() {
return true;
}
public void doStuff() {
// uses the local defined method
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(methodName()); // false
// localclass method
System.out.println(OuterClass.this.methodName()); // true
// outerclass method
OuterClass.super.addMouseListener(this); // don't run this, btw
// uses the outerclasses super defined method
}
private boolean methodName() {
return false;
}
});
}
@Override
public void addMouseListener(MouseListener a) {
a.mouseClicked(null);
}
}
答案 2 :(得分:0)
其他所有内容都无法定义自引用属性:
MyClass current = this;
并使用..
虽然我也想知道真实,干净,回答你的问题!