プロパティのJavadocを書く方法は?


93

プロパティとゲッターとセッター(DTOスタイル)のみを保持する「単純な」POJOクラスのプロパティ/メンバーのjavadocを作成するときに、ジレンマに遭遇することがよくあります。

1)プロパティのjavadocを記述する
か...
2)ゲッターのjavadocを記述します

プロパティにjavadocを記述した場合、後でコード補完を介してPOJOにアクセスすると、IDE(Eclipse)は(当然)これを表示できません。また、getter-javadocを実際のプロパティ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にgetterのjavadocプロパティの説明を表示させるために、他の人がどのように実行するかを聞くことは興味深いことです。javadocコメントを複製する必要はありません。

今のところ、プロパティではなくゲッターのみをドキュメント化するように練習することを検討しています。しかし、それは最善の解決策ではないようです...


1
これに関する興味深い議論:stackoverflow.com/questions/1028967/…。受け入れられた回答は、Eclipse / javadocについての質問に対応しています。
b.roth、2010

彼らが私が検討していたことで終わったようです... getterでのみプロパティjavadocを記述してください。

私は日食で機能し、実行時に収集することもできるアノテーションでこれを行う方法を見つけました、それはオプションでしょうか?
Aquarius Power

プライベートメンバーにはjavadocが必要ですか?
cherit

bla bla blaの名前:最良の例
ロドリゴ

回答:


75

(-privateを使用して)Javadocを生成するときにプライベートメンバーを含め、@ linkを使用してそのfieldsプロパティにリンクできます。

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;
    }
}

2
@linkタグと@seeタグの両方を試してみました。しかし、少なくともEclipseではこれが正しく表示されません。Eclipseはリンクを...(drumroll).... link ..として表示します。コンテンツを表示するには、リンクをクリックする必要があります。実際にゲッターを参照しているときに、コード補完をアクティブにしたり(マウスオーバーで)プロパティのjavadocを取得したりしたい...

13
@Kenny-EclipseのユーザビリティのPOVからJavaDocプラクティスをモデル化しないでください。正しい(または十分に十分な)JavaDoc出力を取得するPOVからそれを実行します。IDEが変化し、そして何が今日対処するかもしれない明日不足かもしれません(または、あなたが実際に完全なIDEを変更する場合があります。)
luis.espinal

1
@luis @linkは、実際のjavadocを表示するためにクリックする必要があるリンクを意味します。これはEclipseのユーザビリティの問題ではなく、使いやすいjavadocを提供するための間違ったソリューションです。
NateS

4

ロンボクはそのようなタスクのための非常に便利なライブラリです。

@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:ライブラリには、チェックアウトしたい多くのクールな機能があります


3

私は両方とも、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;
}

これで完了です。私の意見では、このテンプレートを使用すると、長期的には、プロパティが繰り返しによって何を意味するかを思い出すだけでなく、サイドを追加したい場合にゲッターとセッターにコメントを追加しやすくなります。効果(nullプロパティを許可しない、文字列を大文字に変換するなど)。この目的のためにEclipseプラグインを作成することを検討しましたが、JDTに適切な拡張ポイントが見つからなかったため、あきらめました。

文が常にTで始まるとは限らないことに注意してください。これは、貼り付けの際に、大文字と小文字を区別する必要があります。


23
コピー/貼り付けは悪...そして時間がかかります。これらの手順は多くの作業のように見え、javadocが変更された場合、3つの異なる場所で更新できます。プラグインがこれを正当化するとは思わない...少なくとも、プラグインは、たとえばプロパティjavadocがマスターであると見なして、ゲッター(およびセッター)を上書きする必要があります。私が達成したいのは、1つの場所でjavadocを記述し、ゲッターとプロパティjavadocsの両方に同じ説明を仮定させることです

通常、プロパティはそれほど頻繁には変更されません。また、Eclipseのオートコンプリートを使用したコピーアンドペースト操作は、プロパティJavadocが作成されてから30秒未満で完了します。
MetroidFan2002

4
私は確信していません...このタイプのコピー/貼り付けスキームの導入は、矛盾につながる可能性があります。他の料理人(または私)が後でコードを編集することにあまりにも信仰がありません。また、少なくとも完全な事前設計がない場合、javadocプロパティは、少なくとも実験/設計段階で変更される可能性があります。そして、コードが新しいことを念頭に置いて記述されている場合、javadocの品質は向上します...気の毒に思えたら申し訳ありません;-)

1
申し訳ありませんが、プロパティの編集は一貫性の欠如につながる可能性があります-いずれにしても、Javadocが何らかの形で活発に維持されない限り、道端で落ちる傾向があります。プロパティjavadocを公開する簡単な方法があったとしても、プロパティjavadoc自体は更新されない可能性が高くなります。それは実際にはチームのコーディング規約などの問題であり、コードレビューなどもそうです。幸運を祈ります。これは私がやっていることなので、忘れないでください。
MetroidFan2002

@Metroid- それが何らかの形で活発に維持されない限り -まあ、それがソースコード自体の一部として扱われる場合、それは活発に維持されるはずです。また、Javadocコメント(および他の言語での同等のコメント)をコードの本質的な部分として扱っていませんが、残念ながら標準的な慣行ですが、多くの悪の根源です。最悪のコメントは古くなったものです。せいぜい、彼らはプログラマーがコードを把握するのを遅くします(古くなったコメントを常に再検証して受け入れ/拒否しなければならないためです)。さらに悪いことに、エラーが発生しやすく、バグを紹介する情報を提供します。
luis.espinal 2011

0

私は本当にそれが問題だと思いますし、公式のJavadocガイドはそれについて何も述べていません。C#は、Propertiesを使用してエレガントな方法でこれを解決できます(私はC#でコーディングしていませんが、それは本当に素晴らしい機能だと思います)。

しかし、私は推測しています:someStringが何であるかを説明する必要がある場合、それはおそらくあなたのコードについて「悪い小」です。someClassを記述してsomeStringを入力する必要があることを意味する場合があるので、SomeClassのドキュメントでsomeStringとは何かを説明し、ゲッター/セッターのjavadocsは必要ありません。


1
コード内での文字列の適切な使用法については、Effective Javaブックの「他の型がより適切な場所で文字列を回避する」を確認してください。
Leonardo Leite
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.