Создайте анонимный внутренний класс и вызовите его методы
Я искал это, но, к сожалению, не смог найти совпадений, у меня есть это 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()
Теперь мой вопрос: что если я хочу вызвать два метода одновременно? Как я могу это сделать?
3 ответа
Вы можете создать такой интерфейс:
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();