Guardando attraverso il Java Collections Framework, ho notato che alcune delle interfacce hanno il commento (optional operation)
. Questi metodi consentono di implementare le classi attraverso un UnsupportedOperationException
se semplicemente non vogliono implementare quel metodo.
Un esempio di questo è il metodo addAll
in Set Interface
.
Ora, come affermato in questa serie di domande, le interfacce sono un contratto definitivo per ciò che l'uso può aspettarsi.
Interfaces are important because they separate what a class does from how it does it. The contract defining what a client can expect leaves the developer free to implement it any way they choose, as long as they uphold the contract.
e
An interface is a description of the actions that an object can do... for example when you flip a light switch, the light goes on, you don't care how, just that it does. In Object Oriented Programming, an Interface is a description of all functions that an object must have in order to be an "X".
e
I think the interface-based approach is significantly nicer. You can then mock out your dependencies nicely, and everything is basically less tightly coupled.
Qual è il punto di un'interfaccia?
Interfaccia + estensione (mixin) vs classe base
Dato che lo scopo delle interfacce è definire un contratto e rendere le vostre dipendenze liberamente accoppiate, non vi sono alcuni metodi che lanciano un tipo di sconfitta allo scopo di UnsupportedOperationException
? Significa che non posso più passare un Set
e usare solo addAll
. Piuttosto, devo sapere quale implementazione di Set
I è stata passata, quindi posso sapere se posso usare addAll
o no. Mi sembra abbastanza inutile.
Quindi qual è il punto di UnsupportedOperationException
? Sta solo recuperando il codice legacy e hanno bisogno di ripulire le loro interfacce? O ha uno scopo più sensuale che mi manca?