Java 使用;“外部”;内部类中的类
定义嵌套类时,是否可以访问“外部”类的方法?我知道可以访问它的属性,但我似乎找不到使用它的方法的方法Java 使用;“外部”;内部类中的类,java,Java,定义嵌套类时,是否可以访问“外部”类的方法?我知道可以访问它的属性,但我似乎找不到使用它的方法的方法 addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2 && //<-- Here I'd like to }
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!
addMouseListener(新的MouseAdapter(){
@凌驾
公共无效mouseClicked(MouseEvent e){
如果(e.getClickCount()==2&&/其他所有操作失败,则可以定义自引用属性:
MyClass current=this;
然后用这个
虽然我也想知道你的问题的真实、干净的答案!因为你的内部类是非静态的,所以外部类的所有方法对内部类都是自动可见的,即使是私有的
所以,只要继续并调用您想要的方法
比如说,
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();
}
});
}
}
有关这方面的更多信息,请参见。在内部类中使用外部类引用还有另一个技巧,我经常使用:
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);
}
}
啊,这的确是个好主意!如果你想把它放在内部类中,那就不对了,'this'指针将指向内部类。要让外部类成为这个指针,你必须用外部类名称来限定它,例如OuterClass.this.Agreed,我想你可能误解了-我们正在谈论的是声明自引用在外部类中,并在内部类中使用它-如前所述,外部类属性可以从内部类访问。如果使用outer.this
对您来说太麻烦了,您可以这样做,但我会将其称为outer
而不是current
,并在内部类中声明。我个人讨厌隐式访问到外部类(除了琐碎的类之外,很容易把事情搞砸),所以我通常使用带有显式成员变量outer的静态类,并在构造过程中将外部类实例作为参数传递。@Software Monkey:带有手动内部类引用的静态外部类,+1。很好的建议!它应该可以工作。您遇到了什么编译器错误?啊,您是对的。我的错误是尝试这样做。要试着看看IDE中有哪些可用的方法。1>2
?这不符合逻辑!;)这是合乎逻辑的-它就是不正确。;-(我想现在有人会给我引用《星际迷航》或《奥美辛》中的一个场景…)