Domanda

Questa è una domanda di codifica stile e pratiche raccomandate:

Come spiegato nelle risposte alla domanda inutile mettere super () nel costruttore? , se si scrive un costruttore per una classe che si suppone di utilizzare il (no-arg) costruttore di default dalla superclasse, si può chiamare super() all'inizio del costruttore:

public MyClass(int parm){
  super(); // leaving this out makes no difference
  // do stuff...
}

, ma si può anche omettere la chiamata; la volontà compilatore in entrambi i casi agiscono come se la chiamata super () erano lì.

E allora, fa a mettere la chiamata in tuoi costruttori o no?

Da un lato, si potrebbe sostenere che tra cui il super() rende le cose più esplicito. OTOH, ho sempre piace la scrittura di codice ridondante, quindi personalmente tendo a lasciarlo fuori; Io però vedo regolarmente nel codice dagli altri.

Quali sono le vostre esperienze? Hai avuto problemi con l'uno o l'altro approccio? Si dispone di linee guida di codifica che prescrivono un approccio?

A proposito: Una questione collegata (solo per riferimento):

c'è un motivo per il codice in modo esplicito un costruttore di default quando non ci sono altri costruttori?

È stato utile?

Soluzione

non scrivo la chiamata super() per lo stesso motivo non scrivo calchi inutili:

Si aggiunge rumore al codice senza fornire eventuali informazioni aggiuntive (né al compilatore non per lo sviluppatore leggere il mio codice).

Altri suggerimenti

Le impostazioni di default di alcune versioni di alcuni IDE generano automaticamente, in modo che è uno dei motivi che si potrebbe vedere di esso.

se scrivere o meno dipende da chi sarà la lettura. Preferisco non aggiungere, ma se non si è certi che i membri del team a capire che cosa fa il compilatore, e come la costruzione oggetto procede, è possibile aggiungerlo "just in case".

Io non, ma l'argomento dato a me per fare questo, mentre all'università era che rende le cose più esplicito, in modo da non 'dimenticare' che un costruttore della superclasse viene chiamato.

Ho appena non vedo la necessità tho.

Io uso la super() solo quando il super() costruttore ha bisogno di parametri.

  

Quali sono le vostre esperienze? Hai fatto   hanno problemi con uno o l'altro   approccio?

Non ho mai chiamato il costruttore di default (esplicito) e mai affrontato problemi

Non ho mai inserirlo e sono rimasto profondamente colpito quando un collega non ha capito che c'era una chiamata implicita apportate alla classe di super-quindi forse dovrei iniziare a farlo.

Vantaggio:. Chiunque legga il codice sa che davvero si vuole chiamare il costruttore di default, non lasciate la chiamata fuori per errore

Svantaggi:. ingombrare il codice con informazioni poco importanti

Di solito, se una lingua consente di omettere qualche istruzione, non è un cattivo stile farlo. Penso che sia una domanda di pesare i pro ei contro. Per esempio, scrivendo esplicitamente super() quando il costruttore ha dei parametri e la classe di base ha anche parametrizzati costruttori a disposizione può essere una buona idea.

Io in realtà mettere la chiamata in super() come trovo che sia un aiutante di memoria disponibile. Quando ho scritto un pezzo di codice a pochi mesi fa e il ritorno ad esso, il super() mi ricorda quando guardo il costruttore che la classe che ho scritto eredita da qualcosa.

Io cerco di evitare di scrivere codice in cui chiama super () è necessaria, perché preferisco la composizione per l'eredità.

Se devo derivare da un'altra classe, cerco di mettere sia dietro una propria interfaccia e superare uno di loro per l'altro come una dipendenza.

Se ho una classe lib, tuttavia, che non posso dare una dipendenza in più, la prima cosa che cerco è quello di utilizzare un decoratore.

Se questo non funziona, e devo derivare da un'implementazione, penso che non importa se super() scrittura o no, dal momento che accade così raramente;)

Quindi, tutto sommato, penso che questa domanda è inutile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top