Как написать Javadoc свойств?

Я часто сталкиваюсь с дилеммой при написании javadoc для свойств / членов «простого» класса POJO, содержащего только свойства, геттеры и сеттеры (в стиле DTO) ....

1) Напишите javadoc для свойства
или ...
2) Напишите javadoc для получателя

Если я напишу javadoc для свойства, моя IDE (Eclipse) (естественно) не сможет отобразить это, когда я позже получу доступ к POJO через завершение кода. И нет стандартного тега javadoc, который позволяет мне связать getter-javadoc с фактическим свойством javadoc.

Пример:

public class SomeDomainClass {

  /**
   * The name of bla bla bla
   */
  private String name;

  /**
   * @return INSERT SOME SMART JAVADOC TAG LINKING TO name's javadoc
   */
  public String getName() {  
    return name;  
  }  

Итак, в основном было бы интересно услышать, как другие делают так, чтобы ваша Eclipse IDE отображала описание свойства javadoc для ваших получателей - без необходимости дублировать комментарий javadoc.

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


person Community    schedule 16.02.2010    source источник


Ответы (4)


Вы можете включить закрытые члены при создании документации Javadoc (используя -private), а затем использовать @link для ссылки на это свойство полей.

public class SomeDomainClass {
    /**
     * The name of bla bla bla
     */
    private String name;

    /**
     * {@link SomeDomainClass#name}
     */
    public String getName() {
        return name;
    }
}

В качестве альтернативы, если вы не хотите создавать Javadoc для всех закрытых членов, вы можете заключить соглашение о документировании всех методов получения и использовать @link в установщиках.

public class SomeDomainClass {
    private String name;

    /**
     * The name of bla bla bla
     */
    public String getName() {
        return name;
    }

    /**
     * {@link SomeDomainClass#getName}
     */
    public void setName(String name) {
        this.name = name;
    }
}
person Chandra Sekar    schedule 16.02.2010
comment
Я экспериментировал с тегами @link и @see ... Но ... по крайней мере, Eclipse не отображает это должным образом. Eclipse отображает ссылку как ... (барабанная дробь) .... ссылка ... которую нужно будет щелкнуть, чтобы увидеть содержимое. Я хочу иметь возможность активировать завершение кода (или при наведении указателя мыши) получить javadoc для свойства, когда я на самом деле просматриваю получатель ... - person ; 16.02.2010
comment
@Kenny - не моделируйте свои практики JavaDoc с точки зрения удобства использования Eclipse. Сделайте это с точки зрения получения правильного (или достаточно хорошего) вывода JavaDoc. IDE меняются, и то, что сегодня может быть несовершенным, может быть решено завтра (или вы можете полностью изменить IDE). - person luis.espinal; 09.08.2011
comment
@luis @link означает ссылку, по которой нужно щелкнуть, чтобы увидеть фактическую документацию javadoc. Это не проблема удобства использования Eclipse, это неправильное решение для предоставления простой в использовании документации javadoc. - person NateS; 19.08.2016

Lombok - очень удобная библиотека для таких задач.

@Getter
@Setter
public class Example {
    /**
     * The account identifier (i.e. phone number, user name or email) to be identified for the account you're
     * requesting the name for
     */
    private String name;
}

Это все, что вам нужно! Аннотация @Getter создает метод получения для каждого частного поля и присоединяет к нему javadoc.

PS: в библиотеке есть много интересных функций, которые вы, возможно, захотите опробовать.

person Amanuel Nega    schedule 13.12.2016

Я делаю и то, и другое, чему способствует автозаполнение Eclipse.

Сначала я документирую недвижимость:

/**
 * The {@link String} instance representing something.
 */
private String someString;

Затем я копирую и вставляю это в геттер:

/**
 * The {@link String} instance representing something.
 */
public String getSomeString() {
    return someString;
}

В eclipse операторы @return имеют автозаполнение - поэтому я добавляю слово Gets, строчную букву «t» и копирую предложение со строчной буквой «t». Затем я использую @return (с автозаполнением Eclipse), вставляю предложение и затем прописываю букву T. Тогда это выглядит так:

/**
 * Gets the {@link String} instance representing something.
 * @return The {@link String} instance representing something.
 */
public String getSomeString() {
    return someString;
}

Наконец, я копирую эту документацию в установщик:

/**
 * Gets the {@link String} instance representing something.
 * @return The {@link String} instance representing something.
 */
public void setSomeString(String someString) {
    this.someString = someString;
}

Затем я изменяю его, и с помощью автозаполнения Eclipse вы можете получить не только тег @param, но и имя параметра:

/**
 * Sets the {@link String} instance representing something.
 * @param someString The {@link String} instance representing something.
 */
public void setSomeString(String someString) {
    this.someString = someString;
}

Тогда я закончил. На мой взгляд, этот шаблон значительно упрощает, в конечном итоге, не только напоминать себе, что это свойство означает через повторение, но также упрощает добавление дополнительных комментариев к геттеру и сеттеру, если вы хотите добавить сторону эффекты (например, запрет на использование пустых свойств, перевод строк в верхний регистр и т. д.). Я исследовал создание плагина Eclipse для этой цели, но мне не удалось найти подходящую точку расширения для JDT, поэтому я сдался.

Обратите внимание, что предложение не всегда может начинаться с буквы T - просто первая буква должна быть не заглавной / рекапитализированной при вставке.

person MetroidFan2002    schedule 16.02.2010
comment
Копирование / вставка - это зло ... и отнимает много времени. Эти шаги выглядят как большая работа, и если javadoc изменится, у вас будет 3 разных места для обновления. Я не думаю, что плагин также оправдал бы это ... по крайней мере, тогда плагин должен был бы, например, Считайте свойство javadoc главным, а затем перезапишите геттеры (и сеттеры). Я хочу написать javadoc в одном месте, а затем заставить оба метода get и javadoc свойств предполагать одно и то же описание ... - person ; 16.02.2010
comment
Обычно свойства меняются не так часто. А операции копирования и вставки с автозаполнением Eclipse занимают менее 30 секунд после создания Javadoc свойства. - person MetroidFan2002; 16.02.2010
comment
Я не уверен ... Введение этого типа схемы копирования / вставки, ИМХО, обязательно приведет к несоответствиям. Я слишком мало верю в то, что другие повара (или я сам) отредактируют код позже. Кроме того, по крайней мере, если у вас нет полного предварительного проектирования, свойства javadoc часто могут изменяться, по крайней мере, на этапе экспериментов / проектирования. И javadoc будет более качественным, если будет написан, когда код будет свежим в памяти ... Извините, если я кажусь нытиком ;-) - person ; 16.02.2010
comment
Извините, но редактирование свойств обязательно приведет к несоответствиям - в любом случае, Javadoc имеет тенденцию уходить на второй план, если он не поддерживается каким-либо образом. Даже если бы существовал простой способ раскрыть свойство javadoc, вполне вероятно, что само свойство javadoc не будет обновлено. Это действительно вопрос соглашений о кодировании в команде и т. Д., И обзоров кода, и тому подобного - удачи вам, я просто так делаю, поэтому не забываю. - person MetroidFan2002; 16.02.2010
comment
@Metroid - если он не поддерживается каким-либо образом - ну, предполагается, что он будет активно поддерживаться , если рассматривается как часть самого исходного кода. И не рассматривать комментарии Javadoc (и их эквиваленты на других языках) как неотъемлемую часть кода, хотя, к сожалению, это стандартная практика, но это корень многих зол. Худший комментарий - тот, который устарел. В лучшем случае они мешают программистам разобраться в коде (поскольку им приходится постоянно проверять и принимать / отклонять устаревшие комментарии). В худшем случае они предоставляют подверженную ошибкам информацию, содержащую ошибки. - person luis.espinal; 09.08.2011
comment
@ luis.espinal Опять же, редактирование свойств обязательно приведет к несоответствиям - если вы не знаете, что свойство должно делать при написании кода, никто не сможет это понять. в любом случае позже. Если вы документируете назначение свойства при его создании, есть вероятность, что вы либо будете использовать его так, как предполагали, либо откажетесь от него в пользу чего-то другого, что означает, что документация обычно согласована в любом случае (свойство существует, как задокументировано , или собственность выброшена) - person MetroidFan2002; 11.08.2011
comment
@Metroid - редактирование свойств не обязательно приведет к несоответствиям. Видите ли, если вам нужно отредактировать свойство, скажем, номинальное изменение его имени, которое требует изменения любого документа javadoc, который ссылается на него (мало чем отличается от обновления имени метода). Если вы откажетесь от него, тогда просто как и в первом случае, вы отбрасываете его документацию и обновляете любой документ javadoc, который на него ссылается. Это ничем не отличается от ведения документации по методам, классам и пакетам. Это лежит в основе того, что означает документировать. - person luis.espinal; 12.08.2011
comment
'cont - Если какой-то фрагмент кода изменяется или если существующие предварительные / пост-условия, инварианты или зависимости внешней системы меняются, то должен измениться и другой фрагмент компилируемого кода И документация по коду. Оба они составляют исходный код, и оба должны поддерживаться одинаково. Несоответствия, о которых вы говорите, не относятся к свойствам, И являются результатом несоблюдения этого принципа согласованности кода / комментариев во время развития системы, а не результатом характера свойств. - person luis.espinal; 12.08.2011
comment
@luis - Вы только что доказали мою точку зрения циклическим образом - редактирование свойств обязательно приведет к несоответствиям, потому что вы должны поддерживать документацию по всему, что его использует. Я не сказал, что это связано с природой свойств, но упомянутые вами побочные эффекты связаны с тем, как используются свойства. Javadoc имеет тенденцию уходить на второй план, если он не поддерживается энергично, и из-за побочных эффектов изменения свойства, которое вы только что задокументировали, изменение свойства обязательно приведет к несоответствиям где-то в строке, если у вас нет отличная документация. Удачи. - person MetroidFan2002; 16.08.2011
comment
Дублирование документации javadoc - это кошмар обслуживания. Мы действительно с этим спорим? - person NateS; 19.08.2016

Я действительно думаю, что это проблема, и официальное руководство по Javadoc ничего об этом не говорит. C # может решить эту проблему элегантным способом с использованием свойств (я не кодирую на C #, но я действительно думаю, что это хорошая функция).

Но у меня есть предположение: если вам нужно объяснить, что такое someString, возможно, это `` плохая мелочь '' в вашем коде. Это может означать, что вы должны написать SomeClass для ввода someString, чтобы вы объяснили, что такое someString в документации SomeClass, и просто чтобы javadocs в getter / setter не понадобились.

person Leonardo Leite    schedule 01.06.2012
comment
Что касается неправильного использования строк в коде, отметьте `` Избегайте строк там, где другие типы более подходят '' в книге Эффективная Java. - person Leonardo Leite; 01.06.2012