构建一个匿名内部类并调用其方法

Sco*_*ion 4 java anonymous-inner-class

我搜索了这个,但遗憾的是找不到匹配,我在这样local anonymous inner class的方法中有这个: -

new Object(){
    public void open(){
        // do some stuff
    }
    public void dis(){
        // do some stuff
    }
};
Run Code Online (Sandbox Code Playgroud)

2 methods里面(open,dis),我知道,如果我想使用他们中的任何一个,那就做

new Object(){
    public void open(){
        // do some stuff
    }
    public void dis(){
        // do some stuff
    }
}.open()
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如果我想同时调用这两种方法怎么办我该怎么

Mik*_*378 6

你可以创建一个这样的界面:

interface MyAnonymous {
   MyAnonymous open();
   MyAnonymous dis();  //or even void here
}

new MyAnonymous(){
    public MyAnonymous open(){
        // do some stuff
        return this;
    }
    public MyAnonymous dis(){
        // do some stuff
        return this;
    }
}.open().dis();
Run Code Online (Sandbox Code Playgroud)

编辑----

正如@Jeff指出的那样,只有在分配了引用时才需要接口.实际上,以下解决方案(由@JamesB引发)完全有效:

new MyObject(){
        public MyObject open(){
            // do some stuff
            return this;
        }
        public MyObject dis(){
            // do some stuff
            return this;
        }
    }.open().dis();
Run Code Online (Sandbox Code Playgroud)

但这不会编译:

MyObject myObject = new MyObject(){
            public MyObject open(){
                // do some stuff
                return this;
            }
            public MyObject dis(){
                // do some stuff
                return this;
            }
        };
myObject.open().dis();  //not compiling since anonymous class creates a subclass of the class
Run Code Online (Sandbox Code Playgroud)