Guardando nel Java Collections Framework, ho notato che alcune interfacce hanno il commento (optional operation)
. Questi metodi consentono di implementare le classi attraverso un UnsupportedOperationException
se non vogliono implementare quel metodo.
Un esempio di questo è il addAll
metodo in Set Interface
.
Ora, come indicato in questa serie di domande, le interfacce sono un contratto determinante per ciò che l'uso può aspettarsi.
Le interfacce sono importanti perché separano ciò che fa una classe da come la fa. Il contratto che definisce ciò che un cliente può aspettarsi lascia lo sviluppatore libero di implementarlo come preferisce, purché mantenga il contratto.
e
Un'interfaccia è una descrizione delle azioni che un oggetto può fare ... per esempio quando si gira un interruttore della luce, la luce si accende, non ti interessa come, solo che lo fa. Nella programmazione orientata agli oggetti, un'interfaccia è una descrizione di tutte le funzioni che un oggetto deve avere per essere una "X".
e
Penso che l'approccio basato sull'interfaccia sia significativamente più bello. Puoi quindi deridere bene le tue dipendenze e tutto è sostanzialmente meno strettamente accoppiato.
Qual è il punto di un'interfaccia?
Interfaccia + estensione (mixin) vs classe base
Dato che lo scopo delle interfacce è quello di definire un contratto e rendere le vostre dipendenze vagamente accoppiate, alcuni metodi non gettano una UnsupportedOperationException
sorta di sconfitta sullo scopo? Significa che non posso più essere superato Set
e solo usare addAll
. Piuttosto, devo sapere quale implementazione Set
sono stata approvata, quindi posso sapere se posso usare addAll
o meno. Mi sembra abbastanza inutile.
Quindi qual è il punto UnsupportedOperationException
? Sta solo compensando il codice legacy e devono ripulire le loro interfacce? O ha uno scopo più sensato che mi manca?
src.zip
funziona alla grande. Aiuta a sapere esattamente quale codice viene eseguito a volte JRE e non rinviare a JavaDoc che può essere un po 'dettagliato.
addAll
inHashSet
. Si differenzia per l'implementazione predefinita inAbstractCollection
cui sicuramente non si lanciaUnsupportedOperationException
.