Guardando nel Java Collections Framework, ho notato che alcune interfacce hanno il commento (optional operation). Questi metodi consentono di implementare le classi attraverso un UnsupportedOperationExceptionse non vogliono implementare quel metodo.
Un esempio di questo è il addAllmetodo 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 UnsupportedOperationExceptionsorta di sconfitta sullo scopo? Significa che non posso più essere superato Sete solo usare addAll. Piuttosto, devo sapere quale implementazione Setsono stata approvata, quindi posso sapere se posso usare addAllo 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.zipfunziona alla grande. Aiuta a sapere esattamente quale codice viene eseguito a volte JRE e non rinviare a JavaDoc che può essere un po 'dettagliato.
addAllinHashSet. Si differenzia per l'implementazione predefinita inAbstractCollectioncui sicuramente non si lanciaUnsupportedOperationException.