Özelliklerin Javadoc'u nasıl yazılır?


93

Sadece özellikleri ve alıcıları ve ayarlayıcıları (DTO tarzı) tutan "basit" bir POJO sınıfının özellikleri / üyeleri için javadoc yazarken sık sık kendimi bir ikilemle buluyorum ...

1) Mülk için javadoc yazın
veya ...
2) Alıcı için javadoc yazın

Özellik için javadoc yazarsam, IDE'm (Eclipse) daha sonra kod tamamlama yoluyla POJO'ya eriştiğimde (doğal olarak) bunu görüntüleyemeyecek. Ve getter-javadoc'u gerçek javadoc özelliğine bağlamamı sağlayan standart bir javadoc etiketi yok.

Bir örnek:

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

Bu nedenle, temelde başkalarının Eclipse IDE'nizin alıcılarınız için javadoc özellik açıklamasını javadoc yorumunu çoğaltmak zorunda kalmadan görüntülemesi için nasıl davrandığını duymak ilginç olurdu.

Şu an itibariyle muayenehanemi mülkleri değil, yalnızca alıcıları belgelemek için yapmayı düşünüyorum. Ama en iyi çözüm gibi görünmüyor ...


1
Bu konuda ilginç tartışma: stackoverflow.com/questions/1028967/… . Kabul edilen yanıt, Eclipse / javadoc hakkında sorduğunuz soruya yöneliktir.
b.roth

Görünüşe göre, düşündüğüm şeyle sonuçlandılar ... sadece alıcılara mülkiyet javadoc yaz.

Bunu tutulmada çalışan ve çalışma zamanında bile toplanabilen ek açıklamalarla yapmanın bir yolunu buldum, bu bir seçenek olabilir mi?
Aquarius Power

özel üyelerin javadoc'a ihtiyacı var mı?
teon

Bla bla bla'nın adı: en iyi örnek
Rodrigo Espinoza

Yanıtlar:


76

Javadocs oluştururken (-özel kullanarak) özel üyeler ekleyebilir ve ardından bu alanlar özelliğine bağlanmak için @link kullanabilirsiniz.

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

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

Alternatif olarak, tüm özel üyeler için Javadoc oluşturmak istemiyorsanız, tüm alıcıları belgelemek ve ayarlayıcılarda @link kullanmak için bir kurala sahip olabilirsiniz.

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
Hem @link hem de @see etiketlerini denedim .. Ama ... en azından Eclipse bunu düzgün göstermiyor. Eclipse, bağlantıyı bir ... (drumroll) .... bağlantısı olarak görüntüler. İçeriği görmek için tıklaması gerekir. Kod tamamlamayı etkinleştirebilmek istiyorum (veya fareyi üzerine getirerek) aslında bir

13
@Kenny - JavaDoc uygulamalarınızı Eclipse'in POV'sinin kullanılabilirliğine göre modellemeyin. Doğru (veya yeterince iyi) JavaDoc çıktısını elde etmek için POV'dan yapın. IDE'ler değişir ve bugün neyin eksik olabileceği yarın ele alınabilir (veya aslında
IDE'leri

1
@luis @link, gerçek javadoc'u görmek için tıklanması gereken bir bağlantı anlamına gelir. Bu bir Eclipse kullanılabilirlik sorunu değil, kullanımı kolay javadoc'lar sağlamak için yanlış bir çözüm.
kabaetler

4

Lombok , bu tür görevler için çok uygun bir kütüphanedir.

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

Tek ihtiyacın olan bu! @GetterEk açıklama her özel alan için bir alıcı yöntemini oluşturur ve buna javadoc ekleyin.

Not : Kitaplık, kontrol etmek isteyebileceğiniz birçok harika özelliğe sahiptir


3

Eclipse'in otomatik tamamlamasının yardımıyla ikisini de yapıyorum.

İlk olarak, özelliği belgeliyorum:

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

Sonra bunu alıcıya kopyalayıp yapıştırıyorum:

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

Eclipse ile, @return deyimlerinin bir otomatik tamamlama özelliği vardır - bu nedenle, Gets sözcüğünü ekliyorum, "t" harfini küçük harfle yazıyorum ve cümleyi küçük "t" harfiyle kopyalıyorum. Daha sonra @return kullanıyorum (Eclipse otomatik tamamlama ile), cümleyi yapıştırıyorum ve dönüşte T harfini büyük harflerle yazıyorum. Daha sonra şuna benzer:

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

Son olarak, bu dokümantasyonu ayarlayıcıya kopyalıyorum:

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

Ardından, onu değiştiriyorum ve Eclipse otomatik tamamlama ile yalnızca @param etiketini değil, aynı zamanda parametrenin adını da alabiliyorsunuz:

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

Sonra bitirdim. Kanımca, bu şablon, uzun vadede, yalnızca mülkün tekrarlama yoluyla kendinize ne anlama geldiğini hatırlatmayı çok daha kolaylaştırmakla kalmaz, aynı zamanda taraf eklemek istiyorsanız alıcıya ve ayarlayıcıya ek yorumlar eklemeyi de kolaylaştırır. efektler (boş özelliklere izin vermeme, dizeleri büyük harfe çevirme vb.). Bu amaçla Eclipse eklentisi yapmayı araştırdım ancak JDT için uygun uzantı noktasını bulamadığım için pes ettim.

Cümlenin her zaman bir T ile başlamayabileceğini unutmayın - sadece ilk harfin büyük harfsiz / yapıştırmada yeniden büyük harfle yazılmış olması gerekir.


24
Kopyala / yapıştır kötüdür ... ve zaman alıcıdır. Bu adımlar çok iş gibi görünüyor ve javadoc değişirse, güncellenecek 3 farklı yeriniz olacak. Bir eklentinin bunu haklı göstereceğini sanmıyorum ... en azından, o zaman eklentinin örneğin javadoc özelliğini ana olarak kabul etmesi ve sonra alıcıların (ve ayarlayıcıların) üzerine yazması gerekir. Yapmak istediğim şey, javadoc'u tek bir yere yazmak ve ardından hem alıcılar hem de özellik javadocs'un aynı açıklamayı almasını sağlamak ...

Tipik olarak, özellikler o kadar sık ​​değişmez. Ve Eclipse'in otomatik tamamlama özelliğiyle kopyalama ve yapıştırma işlemleri, Javadoc özelliği oluşturulduktan sonra 30 saniyeden az sürer.
MetroidFan2002

4
İkna olmadım ... Bu tür bir kopyala / yapıştır düzeninin tanıtılması, IMHO'nun tutarsızlıklara yol açması kaçınılmazdır. Diğer aşçılara (veya kendime) daha sonra kodu düzenleyeceğine çok az inanıyorum. Ayrıca, en azından tam bir ön tasarıma sahip değilseniz, javadoc özellikleri, en azından bir deney / tasarım aşamasında sıklıkla değişebilir. Ve javadoc, kod akılda tutulduğunda yazılırsa daha kaliteli olacaktır ...

1
Üzgünüz, ancak özelliklerin düzenlenmesi tutarsızlıklara yol açacaktır - ne şekilde oynarsanız oynayın, Javadoc bir şekilde kuvvetli bir şekilde korunmadıkça yol kenarına düşme eğilimindedir. Javadoc özelliğini ifşa etmenin kolay bir yolu olsa bile, javadoc özelliğinin kendisinin güncellenmemesi de muhtemeldir. Bu gerçekten takımın kodlama kuralları, vb. Ve kod incelemeleri, bunun gibi şeyler - size iyi şanslar, bunu yaptığım yol bu yüzden unutmam.
MetroidFan2002

@Metroid - bir şekilde kuvvetli bir şekilde muhafaza edilmedikçe - kaynak kodun kendisinin bir parçası olarak ele alınırsa , kuvvetli bir şekilde muhafaza edilmesi gerekir. Ve Javadoc yorumlarını (ve diğer dillerdeki eşdeğerlerini) kodun içsel bir parçası olarak görmemek, ne yazık ki standart uygulama olmasına rağmen, birçok kötülüğün köküdür. En kötü yorum, eskimiş olan yorumdur. En iyi ihtimalle, programcıların kodu kavramasını yavaşlatırlar (çünkü güncelliğini yitirmiş açıklamaları sürekli olarak yeniden doğrulamak ve kabul etmek / reddetmek zorunda kalırlar.)
luis.espinal

0

Bunun bir sorun olduğunu düşünüyorum ve resmi Javadoc rehberi bu konuda hiçbir şey söylemiyor. C # bunu Özellikler kullanımıyla zarif bir şekilde çözebilir (C # ile kodlamam, ancak bunun gerçekten güzel bir özellik olduğunu düşünüyorum).

Ama bir tahminim var: someString'in ne olduğunu açıklamanız gerekiyorsa, belki kodunuz hakkında `` kötü bir küçük '' olabilir. Bu, someString yazmak için SomeClass yazmanız gerektiği anlamına gelebilir, bu nedenle SomeClass belgelerinde someString'in ne olduğunu açıklarsınız ve getter / setter'daki javadocs'un gerekli olmaması için.


1
Kodda dizelerin uygun şekilde kullanılmaması hakkında, Etkili Java kitabında `` Diğer türlerin daha uygun olduğu dizelerden kaçının '' seçeneğini işaretleyin.
Leonardo Leite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.