我正在开发一个小型Swing应用程序,需要一些帮助。我有一个MouseListener的内联类,并且我想在父类中调用一个方法,但是,this
是MouseListener的一个实例。
class ParentClass
{
void ParentMethod()
{
//...
swing_obj.addMouseListener(
new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
//Want to call this.methodX("str"), but
//this is the instance of MouseListener
}
public void mouseEntered(MouseEvent e){ }
public void mouseExited(MouseEvent e){ }
public void mousePressed(MouseEvent e){ }
public void mouseReleased(MouseEvent e){ }
}
);
//...
}
void methodX(String x)
{
//...
}
}
任何帮助都将不胜感激。
答案 0 :(得分:3)
即使this
是匿名类型的实例,您仍然可以致电methodX("str")
- 只需不要在this
前加上。
如果你想要明确,我认为是一些语法可以让你这样做 - 你可以写
ParentClass.this.methodX("str");
但我个人不打算明确,除非你真的需要(例如消除MouseListener
中方法的来电歧义。
答案 1 :(得分:1)
除了从通话中删除this
之外,您无需执行任何操作。
如果您仍想使用this
,则必须使用前缀ParentClass
。例如。 ParentClass.this.methodX(...)
......但那只是丑陋的,应该在需要时使用(命名冲突等)。
答案 2 :(得分:0)
正如其他人所说,只需删除this.
,您就可以在外部类中调用方法。在极少数情况下,当外部类和嵌套类具有带有相同名称和参数列表的methodS时,可以使用OuterClass.this.someMehtod(...);
来调用它。
为了在编写匿名内部类时更清晰的代码,我建议你使用适配器。对于许多Swings接口,有实现它们的抽象适配器,您只能覆盖感兴趣的方法。在这种情况下,它将是MouseAdapter
:
class ParentClass
{
void ParentMethod()
{
swing_obj.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
someMethodX();
}
});
}
void methodX(String x)
{
//...
}
}