2016-04-05 3 views
3

Существует ли стандартная или лучшая практика для написания javadocs для языковых методов Java/JVM, содержащих побочные эффекты?Как обрабатывать побочные эффекты Java

У меня есть метод void, который изменяет один из параметров метода, но не знает, как документировать фактическое возвращаемое значение (поскольку фактического возврата нет).

/** 
    * @param obj - reference object 
    * @return obj - obj.name is changed to 'hello' //TODO figure out javadoc annotation 
*/ 
void methodName(Object obj) { 
    if (obj != null) { 
     obj.name = "hello"; 
    } 
} 

Это только кажется, что нет хорошего способа пометить побочные эффекты на объекте, так как @param и @return аннотаций на самом деле не диктуют, что происходят.

+0

, что мне кажется, что утечка вашей абстракции –

+1

Я не хочу говорить о побочных эффектах или дырявых абстракций - Я просто хочу напишите некоторые комментарии, чтобы документировать, что делают прежние методы. – tmarthal

+1

Нет стандартной аннотации JavaDoc, такой как @ SideEffectTowWatchFor или @ LeakyAbstraction (и я полностью признаю, что я, и почти все остальные, сделал то же самое), поэтому просто убедитесь, что вы четко поняли в документах о том, что происходит, что ожидаемый и т. д. По сути, ваш контракт определяет этот метод для воздействия на объекты таким образом. –

ответ

1

Для описания побочных эффектов нет стандартной аннотации Javadoc. Побочные эффекты обычно упоминаются в человеко-читаемом описании метода. В вашем случае объект, который передается как параметр, изменяется, поэтому вы можете рассмотреть кратковременное повторение побочного эффекта после тега @param.

В любом случае тег @return не подходит для документирования побочных эффектов: ваш метод имеет void в качестве возвращаемого типа, поэтому он ничего не возвращает.

В вашем случае, ваш Javadoc может выглядеть следующим образом:

/** 
* Methods a name. This method sets the "name" attribute of obj to "hello". 
* @param obj reference object ("name" attribute is modified by this method) 
*/ 
void methodName(Object obj) { 
    if (obj != null) { 
     obj.name = "hello"; 
    } 
} 
Смежные вопросы