2009-11-06 2 views
1

У меня есть этот код Java:Что вы думаете о возвращении протоколирования предложение

if(isNull(office) || isNull(pricelist)) { 
    log.warn("The document {0}-{1} is not valid.",codDoc,numDoc); 
    return null; 
} 

Как вы думаете, это нормально, если я его переписать как:

if(isNull(office) || isNull(pricelist)) 
    return log.warn("The document {0}-{1} is not valid.",codDoc,numDoc); 

Таким образом

public void warn(String logLine, Object... args) 
{...} 

станет:

public Object warn(String logLine, Object... args) 
{...;return null;} 

Учитывайте, что регистрация в этой системе обязательна. Спасибо за ваши комментарии.

+1

Пожалуйста, добавьте форматирование кода. –

+1

Зачем вы хотите это сделать? Мне это непонятно. –

+0

Я пытался уменьшить количество строк кода, но, как все указывают, это не очень хорошая идея, она жертвует ясностью и вводит странный API, большое спасибо за ваши быстрые ответы. – jmpeace

ответ

3

Я бы никогда не сделал этого, поскольку он создает удивительный API. В Java, в частности, точка не является термином, точка - ясность. Наличие дополнительной строки для возврата ценно в том, что она говорит вам, что возврат не связан с протоколированием.

И если вы находитесь в методе, который сам по себе имеет пустоту, вам все равно придется поместить возврат на отдельной строке.

И вообще, если вы объявляете его возвратом Object, метод должен возвращать Object, иначе вы должны его отбросить, что еще хуже. Вы могли бы работать над этим с помощью генерических средств:

public <T> T warn(String message, Object... params) { return null; } 

Но в общем случае это не является хорошей идеей.

0

Это зависит от того, что вам нужно для ведения журнала.

Если вашей системе необходимо создать объект как исключение во время процесса ведения журнала, второй способ (Object warn()) может сработать для вас.

Это действительно зависит от того, что вам нужно ....

2

Если вы всегда будете возвращать нуль из метода warn, то он не будет никакой разницы, так или иначе; никакие дополнительные функции не включены и дополнительная информация не предоставляется. Я бы выполнил изменение только в том случае, если какой-либо внешний объект требует, чтобы ваш метод ведения журнала соответствовал сигнатуре, где возвращается Object.

+1

I второй это. Кроме того, Java-программисты во всем мире используются, чтобы «log.warn» использовался только для его побочного эффекта, и ничего не возвращалось. Любое новое чтение вашего кода будет смущено для начала. –

0

Я не думаю, что это нормально, чтобы переписать его, как вы предложили.

Пара причин.

  1. Многие стандартные интерфейсы журнала имеют void тип возврата для warn метода. Для кто-то знаком с этим API, это бы surprizing побочный эффект
  2. Ваш метод warn не возвращает реальный объект, он всегда возвращает null. Это будет сюрприз для сопровождающего, чтобы это выяснить.
0

Использовать первый способ.

Причина в том, что второй метод подразумевает, что возвращаемое значение из метода предупреждения имеет смысл. Второй способ, как написано, заставляет возвращаемое значение из метода предупреждения отображаться так, как если бы это было возвращаемое значение от вызывающего метода предупреждения, и, вероятно, это неправильная вещь, особенно если проект имеет различные возвращаемые значения обрабатывать различные условия предупреждения.