2009-07-04 8 views
16

Un metodo che esegue l'override di un altro metodo non eredita la documentazione del metodo che esegue l'override. C'è un modo per dirlo esplicitamente di ereditare la documentazione?Metodo di sovrascrittura della documentazione Java non InheritDoc

/** 
    * {@inheritDoc} 
    * 
    * This implementation uses a dynamic programming approach. 
    */ 
@Override 
public int[] a(int b) { 
    return null; 
} 

risposta

22

Secondo il javadoc documentation:

Ereditando di commenti si verifica in tutti tre possibili casi di eredità da classi e interfacce:

  • Quando un metodo in una classe di sostituire una funzione metodo in una superclasse
  • Quando un metodo in un'interfaccia sovrascrive un metodo in una superinterfaccia
  • Quando un metodo in una classe implementa un metodo in un'interfaccia

I commenti possono essere esplicitamente ereditati utilizzando il tag {@inheritDoc}. Se non vengono forniti commenti per un metodo prevalente, i commenti verranno ereditati implicitamente. Gli aspetti dei commenti ereditari (ad esempio params, valore di ritorno, ecc.) Possono essere ignorati se lo si desidera.

Importante, è necessario assicurarsi che il file di origine contenente il codice con il commento da ereditare sia disponibile per lo strumento javadoc. È possibile farlo utilizzando l'opzione - sourcepath.

5

Da the 1.4.2 Javadoc manual

Algoritmo per Ereditare Metodo Commenti - Se un metodo non dispone di un commento di documentazione, o ha un tag {} @inheritDoc, le ricerche strumento Javadoc per un commento applicabile utilizzando la seguente algoritmo, che è stato progettato per trovare il più specifico commento di documentazione del caso, dando la preferenza alle interfacce sopra superclassi:

  1. Cerca in ogni interfaccia direttamente implementato (o estesa) nell'ordine in cui appaiono in seguito la parola che ho mplements (o extends) nella dichiarazione del metodo. Utilizzare il primo commento del documento trovato per questo metodo.
  2. Se il passaggio 1 non è riuscito a trovare un commento di documentazione, applicare ricorsivamente l'intero algoritmo per ogni interfaccia direttamente implementato (o estesa), nello stesso ordine in cui sono stati esaminati nella fase 1.
  3. Se il passaggio 2 non è riuscito a trovare un doc commento e questa è una classe diversa da Object (non un'interfaccia): 1. Se la superclasse ha un commento doc per questo metodo, usarlo. 2. Se il passaggio 3a non è riuscito a trovare un commento di un doc, ricorre in modo ricorsivo l'intero algoritmo alla superclasse.

credo (anche se potrei sbagliarmi) che questo algoritmo di base si applica ancora a Java 1.5 e 1.6 ... anche se in realtà sarebbe tremendamente bello di Sun di pubblicare un documento definitivo completo autonomo per ogni versione del set di strumenti ... Immagino che sia un overhead che non possono permettersi, almeno per un set di strumenti gratuito.

Cheers. Keith.


Edit:

Ecco un esempio veloce e sporco.

Codice

package forums; 


interface Methodical 
{ 
    /** 
    * A no-op. Returns null. 
    * @param i int has no effect. 
    * @return int[] null. 
    */ 
    public int[] function(int i); 
} 


interface Methodological extends Methodical 
{ 
    /** 
    * Another no-op. Does nothing. 
    */ 
    public void procedure(); 
} 


class Parent implements Methodological 
{ 
    @Override 
    public int[] function(int i) { 
    return null; 
    } 

    @Override 
    public void procedure() { 
    // do nothing 
    } 

} 


class Child extends Parent 
{ 
    /** {@inheritDoc} */ 
    @Override 
    public int[] function(int i) { 
     return new int[0]; 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public void procedure() { 
    System.out.println("I'm a No-op!"); 
    } 

} 


public class JavaDocTest 
{ 
    public static void main(String[] args) { 
    try { 
     new Child().procedure(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Javadoc

C:\Java\home\src\forums>javadoc -package -sourcepath . JavaDocTest.java 
Loading source file JavaDocTest.java... 
Constructing Javadoc information... 
Standard Doclet version 1.6.0_12 
Building tree for all the packages and classes... 
Generating forums/\Child.html... 
Generating forums/\JavaDocTest.html... 
Generating forums/\Methodical.html... 
Generating forums/\Methodological.html... 
Generating forums/\Parent.html... 
Generating forums/\package-frame.html... 
Generating forums/\package-summary.html... 
Generating forums/\package-tree.html... 
Generating constant-values.html... 
Building index for all the packages and classes... 
Generating overview-tree.html... 
Generating index-all.html... 
Generating deprecated-list.html... 
Building index for all classes... 
Generating allclasses-frame.html... 
Generating allclasses-noframe.html... 
Generating index.html... 
Generating help-doc.html... 
Generating stylesheet.css... 

Produce file: /// C: /Java/home/src/forums/index.html

function 

public int[] function(int i) 

    A no-op. Returns null. 

    Specified by: 
     function in interface Methodical 
    Overrides: 
     function in class Parent 

    Parameters: 
     i - int has no effect. 
    Returns: 
     int[] null. 

procedure 

public void procedure() 

    Another no-op. Does nothing. 

    Specified by: 
     procedure in interface Methodological 
    Overrides: 
     procedure in class Parent 
+0

Il documento javadoc cui ho fatto riferimento nel mio post è relativo alla versione 1.6 di J2SE. –

-2

Scambia @ Override con javaDoc.

@Override 
    /** 
    * {@inheritDoc} 
    */ 
+3

Ciò non ha alcun effetto. – Bex

Problemi correlati