Обратите внимание, что UnsupportedOperationException является только ОК из-за конкретного свойства Framework Java Collections Framework, что реализациям разрешено «отключаться» от реализации части интерфейса, потому что они неизменяемы.
Так что это нормально для put() (при условии, что все методы мутатора выполняют одно и то же), но Карта, которая выбрасывает UnsupportedOperationException из метода size(), будет просто сломана. Если вы пытаетесь реализовать какую-то карту, которая не знает, насколько она велика, у вас могут быть проблемы (хотя иногда вы можете вернуть Integer.MAX_VALUE).
Также обратите внимание, что в документации класса для UnsupportedOperationException указано, что он является частью структуры коллекций Java. Вне рамки коллекций нельзя исключить UnsupportedOperationException и привести к тому, что код клиента не будет работать. Конечно, это исключение RuntimeException, но только потому, что вы можете его бросить, это не значит, что ваш метод будет работать, если он всегда будет.
Вместо этого вы можете либо реорганизовать интерфейс (возможно, разделить его на две части), либо переосмыслить, почему этот класс утверждает, что он является Foo, когда это явно не так, поскольку он не может выполнять то, что определено Foos чтобы иметь возможность делать.
UnsupportedOperationException обычно является способом выхода, если только вы не знаете, что метод будет вызван в любом случае, и вы хотите сделать больше «no-op», и в этом случае возвращение нулевого или подобного - это лучшее, что вы можете сделать , – skaffman 2008-10-07 17:12:25
хорошо ... кажется, вы ответили на свой вопрос там, Майк. – Sandman 2008-10-07 21:53:30