Ho visto la discussione su questa domanda su come sarebbe istanziata una classe che implementa da un'interfaccia. Nel mio caso, sto scrivendo un programma molto piccolo in Java che utilizza un'istanza di TreeMap
, e secondo l'opinione di tutti lì, dovrebbe essere istanziato come:
Map<X> map = new TreeMap<X>();
Nel mio programma, sto chiamando la funzione map.pollFirstEntry()
, che non è dichiarata Map
nell'interfaccia (e un paio di altri che sono presenti Map
anche nell'interfaccia). Sono riuscito a farlo eseguendo il casting in un TreeMap<X>
ovunque io chiamo questo metodo come:
someEntry = ((TreeMap<X>) map).pollFirstEntry();
Comprendo i vantaggi delle linee guida di inizializzazione descritte sopra per i programmi di grandi dimensioni, tuttavia per un programma molto piccolo in cui questo oggetto non sarebbe passato ad altri metodi, riterrei che non sia necessario. Tuttavia, sto scrivendo questo codice di esempio come parte di una domanda di lavoro e non voglio che il mio codice appaia male o ingombra. Quale sarebbe la soluzione più elegante?
EDIT: Vorrei sottolineare che sono più interessato alle buone pratiche di codifica piuttosto che all'applicazione della funzione specifica TreeMap
. Come alcune delle risposte hanno già sottolineato (e ho contrassegnato come risposta la prima per farlo), è necessario utilizzare il livello di astrazione più elevato possibile, senza perdere funzionalità.