Причина, по которой тернарный оператор не работает, заключается в том, что это значение , задающее значения. Значение: «else» после «:» нужно вернуть значение того же типа, что и «then» case после «?».
throw new
И не возвращает объект провайдеров ...
Но в конце концов, это не имеет значения, в любом случае; как действительно просто версия этого кода выглядит так:
if (providers.length == 0) {
throw new IllegalArgumentException();
}
this.providers = providers;
И для того, чтобы сделать вещи проще читать, вы можете даже пойти на:
checkProvidersNotEmpty(providers);
this.providers = providers;
Другими словами: вы двигаетесь исключение бросает в отдельный метод. неявное соглашение здесь будет заключаться в том, что метод с именем checkSomething()
генерирует исключение, если проверка не выполняется. И помимо этого: дайте разумное сообщение при создании этого исключения. Это будет помочь отладки позже.
Вы не стремитесь к использованию самой короткой программы, но для кратчайшей версии, которая поставляется с лучшими , читает.
Использование тернарного оператора здесь не приведет к «легко читаемому» опыту. Таким образом: забудьте об этом.
Это не «упрощено», то есть несколько запутано и менее читаемо. – luk2302
Синтаксис тернарного оператора: 'условие? value1: value2'. Оператор' throw' не является значением. Терминальный оператор не является универсальным сокращением для оператора 'if'. – khelwood
Возможный дубликат [Может ли использовать тернарный/условный оператор Java (? :) для вызова методов вместо назначения значений?] (Http://stackoverflow.com/questions/12554547/can-javas-ternary-conditional-operator-be -used-to-call-methods-than-of) –