Отражение должно быть последним средством. Этот код не является типобезопасным.

я есть ряд функций:

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 () сначала создает коллекцию, а затем выполняет итерации, что нормально, если функция обрабатывается лениво.

Предложения? (помимо того, чтобы делать кучу если)

Ответы на вопрос(7)

Ваш ответ на вопрос