Come dovrei sottoclasse una classe che costruisce i suoi oggetti usando principalmente metodi statici

4

Ho una classe, che richiede molti parametri esoterici per costruire un oggetto. Non ho scritto il codice e, francamente, non capisco completamente, tutte le sfumature. Esiste un metodo valueOf (String) di questa classe, che viene utilizzato principalmente per costruire oggetti di questa classe e inoltre esegue calcoli abbastanza complessi per costruire l'oggetto.

Passo una matrice di oggetti di questa classe in un pacchetto di generazione di report che chiama il metodo toString () di ciascuno di questi oggetti e costruisce un'intestazione.

Ho bisogno di sovrascrivere il metodo toString () per eliminare alcune cose extra che restituisce, in modo che le mie intestazioni siano pulite.

Quale sarebbe il modo migliore per farlo. Ho pensato di creare sottoclassi di questa classe, ma anche questo si sta rivelando un po 'doloroso, dal momento che devo replicare il metodo valueOf () per la sottoclasse.

    
posta Aditya 28.09.2018 - 16:09
fonte

2 risposte

7

I need to override the toString() method to get rid of some extra stuff

Questo approccio sembra essere il problema principale. Quando ho letto questa frase, mi ha dato un segnale di avvertimento immediato, dal momento che stai cercando di cambiare il comportamento di una classe in modo incompatibile usando l'ereditarietà. Questo può facilmente diventare una violazione del LSP e può causare un sacco di problemi imprevisti.

Invece di (ab) usare l'ereditarietà, un modo migliore potrebbe essere creare qualcosa come un proxy o wrapper oggetto per ciascuno degli oggetti nell'array restituito, che può essere fatto dopo la costruzione degli oggetti originali, non è necessario modificare il codice di costruzione stesso. La classe wrapper implementa toString nel modo desiderato, utilizzando le chiamate a toString dell'oggetto spostato, se necessario. Può anche implementare qualsiasi altro metodo richiesto dal generatore di report in modo simile. Quindi passa la matrice risultante di oggetti spostati nel pacchetto di generazione del report.

Nota che questa soluzione è indipendente dal processo di costruzione, quindi non importa se ci sono principalmente metodi statici coinvolti o meno.

    
risposta data 28.09.2018 - 16:43
fonte
3

Non puoi. L'uso di metodi statici rende il tuo codice, beh, statico.

Ti incoraggio a creare un builder per questa classe che chiama metodi protetti ma non statici. Da lì, puoi facilmente estendere tale classe e sovrascrivere i metodi in base alle tue esigenze.

Non devi eliminare completamente i metodi statici se pensi che ci siano quelli che li usano. Prendi invece in considerazione la deprecazione e, nel tuo rilascio successivo, puoi rimuoverli.

Buona fortuna a te!

    
risposta data 28.09.2018 - 16:17
fonte

Leggi altre domande sui tag