Quando si copia / incolla metodi privati è necessario portare con sé il Javadoc? [chiuso]

1

Quindi, sfortunatamente, sono bloccato con il codice in cui sto facendo questo:

@Override
method A{
    //calls private methods 1-8
}

private method 1{
    //copy/pasted
}

E così via per tutti i metodi privati. Avrei preferito che gli sviluppatori del metodo che ho scavalcato avessero protetto i metodi privati, ma ora non posso cambiarlo.

Tutti questi metodi privati hanno javadoc insieme a loro - dovrei portarlo con le funzioni copia / incollato nella mia classe e regolarlo di conseguenza, o non perdere tempo perché è documentato nel file originale?

    
posta Mitch 31.07.2014 - 15:05
fonte

4 risposte

2

Consiglierei di copiare javadoc insieme ai metodi, dal momento che chiunque guardi questa classe in futuro potrebbe benissimo non avere idea che questi metodi privati siano esattamente gli stessi di quelli della classe di origine.

Inoltre, quando viene generato javadoc per la nuova classe, questi metodi non avranno la documentazione prevista. Inoltre, cosa succede se l'implementazione nei metodi originali o copiati cambia in modo indipendente? Sarebbe molto facile per javadoc diventare fuori sincrono.

Infine, dal momento che stai semplicemente copiando i metodi all'ingrosso, non è davvero una perdita di tempo copiare la documentazione adiacente allo stesso tempo.

    
risposta data 31.07.2014 - 15:32
fonte
0

Potresti, invece di copiare, incollare il codice come parte della tua build? Se hai marcato l'inizio e la fine della sezione copiata in un particolare stile di commento e poi hai fatto in modo che uno script lo inserisca nell'altro file prima della compilazione, avresti lo stesso risultato ma con un processo automatico.

Ovviamente questa è una soluzione terribile in generale, ma rispetto al copia-incolla, almeno non hai lo stesso codice scollegato in più punti, il che è quasi garantito per causare problemi in futuro.

Pensa anche molto seriamente se non c'è un modo per evitarlo del tutto pensando a livello laterale. Potrebbe non essere possibile, ma a volte una soluzione intelligente si presenterà.

    
risposta data 31.07.2014 - 16:16
fonte
0

Per domande come questa, inizio rispondendo alla domanda "cosa rende il codice più facile da capire per me e la mia organizzazione?". Questa è di gran lunga la considerazione più importante.

    
risposta data 01.08.2014 - 00:58
fonte
0

Proprio come non si copia e incolla tutti i metodi dalla superclasse durante la scrittura del codice, quindi non si dovrebbe copiare e incollare tutta la documentazione quando si documentano metodi sovrascritti.

Da javadoc a docs.oracle.com :

{@inheritDoc}

Inherits (copies) documentation from the "nearest" inheritable class or implementable interface into the current doc comment at this tag's location. This allows you to write more general comments higher up the inheritance tree, and to write around the copied text.

This tag is valid only in these places in a doc comment:

  • In the main description block of a method. In this case, the main description is copied from a class or interface up the hierarchy.
  • In the text arguments of the @return, @param and @throws tags of a method. In this case, the tag text is copied from the corresponding tag up the hierarchy.

See Automatic Copying of Method Comments for a more precise description of how comments are found in the inheritance hierarchy. Note that if this tag is missing, the comment is or is not automatically inherited according to rules described in that section.

E così, si eredita la documentazione dalla superclasse. Se la documentazione della superclasse si aggiorna, anche la tua lo fa.

Proprio come con l'ereditarietà del codice, puoi estendere i commenti.

Vediamo come appaiono le cose in un IDE e codice ...

public interface IFace {
    /**
     * This is a method.
     */
    public void method1();

    /**
     * This is also a method
     */
    public void method2();
}

Questa è solo un'interfaccia con alcuni javadoc e due metodi.

Consente a una classe di implementare questo ...

public class CClass implements IFace {

    /**
     * {@inheritDoc}
     * This just returns.
     */
    public void method1() {
    }

    public void method2() {
    }
}

E poi i javadoc stessi:

public void method1()
This is a method. This just returns.
Specified by:
method1 in interface IFace

img

public void method2()
Description copied from interface: IFace This is also a method
Specified by:
method2 in interface IFace

img

La prima cosa da vedere è che con method1 , javadoc è incluso ed esteso con {@inheritdoc} . Tuttavia, no javadoc erediterà anche javadoc da qualsiasi luogo.

Se non stai cambiando il javadoc, non specificarlo. Lascia che l'IDE faccia la sua cosa. Lascia che anche la generazione automatica di javadoc faccia il suo dovere. Copiare e incollare la documentazione può essere altrettanto brutto di copiare e incollare il codice in quanto viola DRY e può portare alla documentazione della superclasse o dell'interfaccia sfuggire alla documentazione del metodo.

D'altro canto, se vuoi scrivere qualcosa di più, eredita la documentazione e scrivila.

    
risposta data 01.08.2014 - 02:51
fonte

Leggi altre domande sui tag