Отражение должно быть последним средством. Этот код не является типобезопасным.
я есть ряд функций:
String first(){}
String second(){}
...
String default(){}
Каждый может вернуть нулевое значение, кроме значения по умолчанию.каждая функция может принимать разные параметры. Например, первый может не принимать аргументов, второй может принимать строку, третий может принимать три аргумента и т. Д. Что я хотел бы сделать, это что-то вроде:
ObjectUtils.firstNonNull(first(), second(), ..., default());
Проблема в том, что из-за вызова функции,это действительно жаждет оценки. Где бы я хотел выйти рано, скажем, после второй функции (потому что вызовы функций могут быть дорогими, например, вызовы API и т. д.). На других языках вы можете сделать что-то похожее на это:
return first() || second() || ... || default()
В Java я знаю, что могу сделать что-то вроде:
String value;
if (value = first()) == null || (value = second()) == null ...
return value;
Это не очень читаемое IMO из-за всех проверок == null.ObjectUtils.firstNonNull () сначала создает коллекцию, а затем выполняет итерации, что нормально, если функция обрабатывается лениво.
Предложения? (помимо того, чтобы делать кучу если)