簡體   English   中英

構建一個匿名內部類並調用其方法

[英]Build an anonymous inner class and call its methods

我搜索了這個,但很遺憾找不到匹配項,我在這樣的方法中有這個local anonymous inner class : -

new Object(){
    public void open(){
        // do some stuff
    }
    public void dis(){
        // do some stuff
    }
};

里面有2 methods (open,dis) ,我知道如果我想使用它們中的任何一個就行了

new Object(){
    public void open(){
        // do some stuff
    }
    public void dis(){
        // do some stuff
    }
}.open()

現在我的問題是如果我想同時調用這兩種方法怎么辦我該怎么

你可以創建一個這樣的界面:

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();

編輯----

正如@Jeff指出的那樣,只有在分配了引用時才需要接口。 實際上,以下解決方案(由@JamesB引發)完全有效:

new MyObject(){
        public MyObject open(){
            // do some stuff
            return this;
        }
        public MyObject dis(){
            // do some stuff
            return this;
        }
    }.open().dis();

但這不會編譯:

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
new MyObject(){
    public MyObject open(){ 
        // do some stuff
        return this;
    }
     public MyObject dis(){ 
        // do some stuff 
        return this;
    }
}.open().dis();

如果要從匿名類調用方法,則意味着它擴展了超類或實現了接口。 所以你可以簡單地存儲在父實例的引用中,並在其上調用所有契約的方法:

interface MyAnonymous {
   void open();
   void dis();
}

MyAnonymous anon = new MyAnonymous () {
    public void open(){
        // do some stuff
    }
    public void dis(){
        // do some stuff
    }
};

anon.open();
anon.dis();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM