Lag / latenza? Chiamo BS su questo. Dovrebbe esserci esattamente zero overhead da questa pratica. ( Modifica: è stato sottolineato nei commenti che questo può, in effetti, inibire le ottimizzazioni eseguite dalla VM HotSpot. Non conosco abbastanza sull'implementazione della VM per confermarlo o negarlo. Stavo basando il mio commento sul C ++ implementazione di funzioni virtuali.)
C'è del sovraccarico di codice. Devi creare tutti i costruttori dalla classe base che desideri, inoltrandone i parametri.
Inoltre non lo vedo come un anti-pattern, di per sé. Tuttavia, lo vedo come un'occasione mancata. Invece di creare una classe che deriva la classe di base solo per motivi di ridenominazione, che ne pensi di creare una classe che contiene la raccolta e offre un'interfaccia migliorata specifica per ogni caso? La cache dei widget dovrebbe davvero offrire l'interfaccia completa di una mappa? O dovrebbe invece offrire un'interfaccia specializzata?
Inoltre, nel caso delle raccolte, il modello semplicemente non funziona insieme alla regola generale dell'uso delle interfacce, non delle implementazioni - vale a dire, in un semplice codice di raccolta, si dovrebbe creare un HashMap<String, Widget>
e quindi assegnarlo a una variabile di tipo Map<String, Widget>
. Il tuo WidgetCache
non può estendere Map<String, Widget>
, perché è un'interfaccia. Non può essere un'interfaccia che estende l'interfaccia di base, perché HashMap<String, Widget>
non implementa quell'interfaccia, e nemmeno un'altra raccolta standard. E mentre puoi renderlo una classe che si estende HashMap<String, Widget>
, devi quindi dichiarare le variabili come WidgetCache
o Map<String, Widget>
, e il primo ti perde la flessibilità di sostituire una raccolta diversa (forse una raccolta di caricamento lazy di ORM), mentre il secondo tipo di sconfigge il punto di avere la classe.
Alcuni di questi contrappunti si applicano anche alla mia classe specializzata proposta.
Questi sono tutti punti da considerare. Potrebbe essere o meno la scelta giusta. In entrambi i casi, gli argomenti offerti dal collega non sono validi. Se pensa che sia un anti-schema, dovrebbe nominarlo.