Все решения действительно являются хакерскими, но массив - это «стандартный» учебник, способ справиться с ним, так как даже до родовых типов он был безопасен для типов.
Другой вариант в этой ситуации - сделать закрытый класс следующим образом:
private class Searcher implements SearchCallback {
private boolean found;
@Override public void onFound(Object o) { found = true; }
public boolean search() {
OuterClass.this.search(this);
return found;
}
}
А затем используйте его так:
boolean found = new Searcher().search();
Редактировать: Если я правильно понимаю комментарий Тома, он предлагает это в качестве альтернативы
public void foo() { //This is the method that enclosed the code in your question
new SearchCallBack() {
private boolean found;
@Override public void onFound(Object o) { found = true; }
{
//The code that was before this in your method
search(this);
//The code that was after this in your method
}
};
}
Я думаю, что это более хакерски, и я действительно нашел бы такой код необычным, но определенно стоит знать, что это вариант.