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