Bagaimana cara menulis properti Javadoc?

93

Saya sering menemukan diri saya dengan dilema ketika menulis javadoc untuk properti / anggota kelas POJO "sederhana" yang hanya memiliki properti dan pengambil serta penyetel (gaya DTO) ....

1) Tulis javadoc untuk properti
atau ...
2) Tulis javadoc untuk pengambil

Jika saya menulis javadoc untuk properti tersebut, IDE (Eclipse) saya (secara alami) tidak akan dapat menampilkan ini ketika saya mengakses POJO nanti melalui penyelesaian kode. Dan tidak ada tag javadoc standar yang memungkinkan saya menghubungkan getter-javadoc ke properti javadoc yang sebenarnya.

Sebuah contoh:

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

Jadi, pada dasarnya akan menarik untuk mendengar bagaimana orang lain meminta Eclipse IDE Anda menampilkan deskripsi properti javadoc untuk getter Anda - tanpa harus menduplikasi komentar javadoc.

Sampai sekarang saya sedang mempertimbangkan untuk membuat latihan saya hanya untuk mendokumentasikan getter dan bukan properti. Tapi sepertinya itu bukan solusi terbaik ...


sumber
1
Diskusi menarik tentang ini di sini: stackoverflow.com/questions/1028967/… . Jawaban yang diterima menjawab pertanyaan Anda tentang Eclipse / javadoc.
b. Saudara
Sepertinya mereka menyimpulkan dengan apa yang saya pertimbangkan ... tulis properti javadoc hanya di getter.
Saya menemukan cara untuk melakukan ini dengan anotasi yang berfungsi di gerhana dan bahkan dapat dikumpulkan saat runtime, apakah itu pilihan?
Aquarius Power
anggota pribadi membutuhkan javadoc?
teon
Nama bla bla bla: contoh terbaik
Rodrigo Espinoza

Jawaban:

76

Anda dapat menyertakan anggota pribadi saat membuat Javadocs (menggunakan -private) dan kemudian menggunakan @link untuk menautkan ke properti bidang tersebut.

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

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

Alternatifnya, jika Anda tidak ingin membuat Javadoc untuk semua anggota privat, Anda bisa memiliki konvensi untuk mendokumentasikan semua getter dan menggunakan @link pada setter.

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;
    }
}
Chandra Sekar
sumber
2
Saya telah bereksperimen dengan tag @link dan @see .. Tapi ... setidaknya Eclipse tidak menampilkan ini dengan benar. Eclipse menampilkan tautan sebagai ... (drumroll) .... tautan .. yang harus diklik untuk melihat isinya. Saya ingin dapat mengaktifkan penyelesaian kode (atau dengan mengarahkan mouse) mendapatkan javadoc untuk properti ketika saya benar-benar menjelajah getter ...
13
@Kenny - jangan modelkan praktik JavaDoc Anda dari POV kegunaan Eclipse. Lakukan dari POV untuk mendapatkan keluaran JavaDoc yang benar (atau cukup baik). IDE berubah, dan apa yang mungkin kurang hari ini mungkin akan ditangani besok (atau Anda mungkin benar-benar mengubah IDE sepenuhnya.)
luis.espinal
1
@luis @linkberarti link yang harus diklik untuk melihat javadoc yang sebenarnya. Ini bukan masalah kegunaan Eclipse, ini adalah solusi yang salah untuk menyediakan javadocs yang mudah digunakan.
NateS
4

Lombok adalah perpustakaan yang sangat nyaman untuk tugas-tugas semacam itu.

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

Hanya itu yang Anda butuhkan! The @Getterpenjelasan menciptakan metode pengambil untuk setiap bidang swasta dan melampirkan javadoc untuk itu.

NB : Perpustakaan memiliki banyak fitur keren yang mungkin ingin Anda periksa

Amanuel Nega
sumber
3

Saya melakukan keduanya, dibantu oleh pelengkapan otomatis Eclipse.

Pertama, saya mendokumentasikan properti:

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

Lalu, saya salin dan tempel ini ke getter:

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

Dengan eclipse, pernyataan @return memiliki pelengkapan otomatis - jadi, saya menambahkan kata Gets, huruf kecil "t", dan salin kalimat dengan huruf kecil "t". Saya kemudian menggunakan @return (dengan pelengkapan otomatis Eclipse), menempelkan kalimat, dan kemudian menggunakan huruf besar T sebagai balasannya. Kemudian terlihat seperti ini:

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

Akhirnya, saya menyalin dokumentasi itu ke penyetel:

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

Kemudian, saya memodifikasinya dan dengan pelengkapan otomatis Eclipse Anda tidak hanya bisa mendapatkan tag @param tetapi juga nama parameternya:

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

Kemudian, saya selesai. Menurut pendapat saya, template ini membuatnya jauh lebih mudah, dalam jangka panjang, untuk tidak hanya mengingatkan diri Anda sendiri apa arti properti melalui pengulangan, tetapi juga memudahkan untuk menambahkan komentar tambahan ke getter dan setter jika Anda ingin menambahkan sisi. efek (seperti tidak mengizinkan properti null, mengubah string menjadi huruf besar, dll). Saya menyelidiki pembuatan plugin Eclipse untuk tujuan ini tetapi saya tidak dapat menemukan titik ekstensi yang sesuai untuk JDT, jadi saya menyerah.

Perhatikan bahwa kalimat mungkin tidak selalu dimulai dengan T - hanya saja huruf pertama harus tidak dikapitalisasi / direkapitalisasi dalam penempelan.

MetroidFan2002
sumber
24
Salin / tempel itu jahat ... dan memakan waktu. Langkah-langkah ini sepertinya membutuhkan banyak pekerjaan, dan jika javadoc berubah, Anda akan memiliki 3 tempat berbeda untuk diperbarui. Saya tidak berpikir sebuah plugin akan membenarkan hal ini ... setidaknya, maka plugin harus mempertimbangkan properti javadoc sebagai master dan kemudian menimpa getter (dan setter). Apa yang ingin saya capai adalah menulis javadoc di 1 tempat tunggal, dan kemudian meminta getter dan properti javadocs mengasumsikan deskripsi yang sama ...
Biasanya, properti tidak sering berubah. Dan operasi salin dan tempel, dengan pelengkapan otomatis Eclipse, membutuhkan waktu kurang dari 30 detik setelah properti Javadoc dibuat.
MetroidFan2002
4
Saya tidak yakin ... Pengenalan jenis skema salin / tempel ini IMHO pasti akan menyebabkan inkonsistensi. Saya kurang percaya pada juru masak lain (atau saya sendiri) yang mengedit kode nanti. Selain itu, setidaknya jika Anda tidak memiliki desain awal yang lengkap, properti javadoc sering kali dapat berubah, setidaknya selama fase percobaan / desain. Dan javadoc akan memiliki kualitas yang lebih baik jika ditulis ketika kodenya masih segar dalam pikiran ... Maaf jika saya terlihat seperti orang yang suka mengeluh ;-)
1
Maaf, tetapi mengedit properti pasti akan menyebabkan ketidakkonsistenan - bagaimanapun cara Anda memainkannya, Javadoc cenderung tersingkir kecuali dijaga dengan baik dengan cara tertentu. Meskipun ada cara mudah untuk mengekspos properti javadoc, kemungkinan besar properti javadoc itu sendiri tidak akan diperbarui. Ini benar-benar masalah konvensi pengkodean tim, dll, dan ulasan kode, hal-hal seperti itu - semoga sukses untuk Anda, ini hanya cara saya melakukannya jadi saya tidak lupa.
MetroidFan2002
@Metroid - kecuali dijaga ketat dengan cara tertentu - yah, seharusnya dijaga dengan baik jika diperlakukan sebagai bagian dari kode sumber itu sendiri. Dan tidak memperlakukan komentar Javadoc (dan padanannya dalam bahasa lain) sebagai bagian intrinsik dari kode, meskipun sayangnya menjadi praktik standar, itu adalah akar dari banyak kejahatan. Komentar terburuk adalah yang sudah ketinggalan zaman. Paling banter, mereka memperlambat programmer dari menguasai kode (karena mereka harus terus-menerus memvalidasi ulang dan menerima / menolak komentar usang.) Lebih buruk lagi, mereka memberikan info yang rawan kesalahan dan menimbulkan bug.
luis.espinal
0

Saya benar-benar berpikir itu adalah masalah dan panduan resmi Javadoc tidak menceritakan apapun tentang itu. C # dapat menyelesaikan ini dengan cara yang elegan dengan penggunaan Properties (Saya tidak membuat kode dalam C #, tapi menurut saya ini fitur yang bagus).

Tapi saya punya tebakan: jika Anda perlu menjelaskan apa itu someString, mungkin itu adalah `` kecil yang buruk '' tentang kode Anda. Ini bisa berarti bahwa Anda harus menulis SomeClass untuk mengetik someString, jadi Anda akan menjelaskan apa itu someString dalam dokumentasi SomeClass, dan agar javadocs di getter / setter tidak diperlukan.

Leonardo Leite
sumber
1
Tentang tidak adanya penggunaan string yang tepat dalam kode, periksa `` Hindari string di mana tipe lain lebih sesuai '' di buku Java yang Efektif.
Leonardo Leite