Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用;“外部”;内部类中的类_Java - Fatal编程技术网

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
?这不符合逻辑!;)这是合乎逻辑的-它就是不正确。;-(我想现在有人会给我引用《星际迷航》或《奥美辛》中的一个场景…)