Переглядаючи рамки колекцій Java, я помітив, що досить багато інтерфейсів мають коментар (optional operation)
. Ці методи дозволяють реалізовувати класи, UnsupportedOperationException
якщо вони просто не хочуть реалізувати цей метод.
Прикладом цього є addAll
метод у Set Interface
.
Тепер, як зазначено в цій серії питань, інтерфейси є визначальним договором того, що використання може очікувати.
Інтерфейси важливі, оскільки вони відокремлюють те, що робить клас від того, як це робить. Договір, що визначає, на що клієнт може розраховувати, залишає розробника вільним для його реалізації будь-яким способом, який він обрав, доки він підтримує контракт.
і
Інтерфейс - це опис дій, які може виконувати об’єкт ... наприклад, коли ви перемикаєте перемикач світла, світло вимикається, вам не байдуже, як це відбувається. В об'єктно-орієнтованому програмуванні інтерфейс - це опис усіх функцій, які повинен мати об'єкт, щоб бути "X".
і
Я думаю, що підхід на основі інтерфейсу значно приємніший. Потім ви зможете добре знущатися зі своїх залежностей, і все в основному менш щільно пов'язане.
Інтерфейс + розширення (mixin) проти базового класу
Враховуючи, що мета інтерфейсів полягає у визначенні контракту та узалежненні ваших залежностей, чи не маючи якихось методів нанести певну UnsupportedOperationException
поразку меті? Це означає, що я більше не можу передаватись Set
та просто користуватися addAll
. Швидше, я повинен знати, яку реалізацію Set
я пройшов, тому я можу знати, чи можу я використовувати, addAll
чи ні. Мені це здається зовсім нікчемним.
Тож у чому сенс UnsupportedOperationException
? Це просто заповнення застарілого коду, і їм потрібно очистити свої інтерфейси? Або це має більш чуттєве призначення, яке мені не вистачає?
src.zip
цим, він працює чудово. Це допомагає точно знати, який код інколи працює JRE, а не відкладати на JavaDoc, що може бути трохи багатослівним.
addAll
вHashSet
. Він відкладає до типової реалізації, вAbstractCollection
яку більшість точно не кидаєтьсяUnsupportedOperationException
.