[英]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.