Если вы думаете, что должны это сделать, вы, вероятно, могли бы использовать хороший рефакторинг.
Моя общая мысль состояла бы в том, что есть состояние неудачи, когда вы пытаетесь вернуть дерево. Если бы это состояние было установлено в общем объекте, то состояние было бы просто там для запроса.
Вы уверены, что каждый объект делает только одну вещь? Ваши объекты действительны в любом состоянии, которого они могут достичь?
В качестве цели, если ваши объекты состоят из более чем 10 методов, причем большинство методов состоят из 1 или 2 строк, а несколько методов имеют полный экран или около того, вам, вероятно, понадобится больше классов, и, как я уже сказал, если вы на самом деле было достаточно классов, и у них было непротиворечивое состояние, эта проблема почти наверняка исчезла бы.
Пример из комментариев:
В комментарии asker использовал indexOf в качестве примера - способ, которым он возвращает два значения в int. Это всегда приведет к довольно простому коду:
int pos=str.indexOf('a');
if(pos < 0) // Not obvious from code--should comment...
System.out.println("Fail");
else
//Do something with pos...
Он предлагает решить эту проблему с исключением, которое приведет к такому коду:
try {
int pos=str.indexOf('a');
//Do something with pos...
} catch(CharacterNotFoundInStringException e) {
System.out.println("Fail");
}
Преимущество которого заключается в большей самодокументированности из-за созданного нового типа исключения, но имеет некоторый необычный синтаксис и требует создания нового класса (исключение).
Мое предложение может быть также для создания нового класса, но кодируйте его следующим образом:
Position pos=str.indexOf('a');
if(!pos.characterFound())
System.out.println("Fail");
else
// do something with pos.location();
Самодокументирование, быстрее (выпадение стека с исключениями всегда медленнее) и т. Д.
Но, как я говорил изначально, самое большое преимущество - это новый класс "pos". Это, вероятно, окажется весьма полезным. Фактически, вместо использования pos.location, вы можете фактически переместить код из предложения "else" внутри метода в "pos", полностью удалив его.
Поскольку он может содержать бизнес-логику, этот метод в Position может фактически выполняться самим вызовом .indexOf, полностью исключая оператор if вокруг вызова.
Это не имеет особого смысла для «универсальных» библиотечных методов, таких как indexOf, жаль, но методы SDK действительно сложно реализовать в правильном ОО, но в вашей собственной бизнес-логике вы почти наверняка найдете это новый класс "Позиция" очень полезен в будущем.