Почему средства проверки в библиотеке предварительных условий Google принимают объект вместо строки
Почему методы check* в библиотеке предварительных условий Google принимают объект вместо строки? Я вижу, что объект называется String.valueOf() на. Я думаю, что этот дизайн был из-за того, что не делал никаких предположений от имени клиента. Но я не могу думать о разумном случае, когда клиент будет вызывать это с чем-то кроме String.
Я предполагаю, что клиенты могут передать объект, который реализовал метод toString(). Но можете ли вы привести пример из реальной жизни о том, как это можно использовать / вы использовали это?
2 ответа
Почему методы check* в библиотеке предварительных условий Google принимают объект вместо строки?
Спектакль. Если у меня есть объект, который еще не String
особенно тот, где toString()
это дорогой метод, то:
checkArgument(valid, obj.toString());
безоговорочно позвонит toString()
и немедленно откажитесь от результата. С другой стороны:
checkArgument(valid, obj);
может отложить этот вызов. Поскольку ожидается, что проверка пройдет успешно, такая отсрочка позволит избежать потерь.
Это та же самая причина использования форматирования журнала вместо передачи объединенной строки ( преимущества форматирования с помощью {} вместо объединения строк в Logger slf4j).
Согласитесь с Джо и плюс: нулевая обработка.
Смотрите сигнатуру метода: checkArgument(boolean expression, @Nullable Object errorMessage)