2 апреля 2013 г.

Обобщённое приведение интерфейса к реализации

Предположим, у вас есть объект, реализующий некий интерфейс и вы ожидаете, что этот объект на самом деле имеет вполне конкретную реализацию. Тогда вы можете воспользоваться следующим обобщённым (generic) методом, чтобы привести его к конкретном типу:

public <T> T castToImplementation(Object element, Class<T> implClass) {
if (!implClass.isInstance(element)) {
throw new IllegalArgumentException("Illegal implementation");
}
return implClass.cast(element);
}
Пусть Group - некий интерфейс, а GroupImpl - его реализация, и вы хотите привести интерфейс к реализации. Пример использования:
// Group element = ...
GroupImpl groupImpl = castToImplementation(element, GroupImpl.class);
Хотелось бы отметить, что подобное приведение нарушает принципы ООП, однако в отдельных случаях это может быть оправдано. Например, в приложении типа "клиент-сервер", где заранее известно, что может быть только одна реализация интерфейса.

Комментариев нет:

Отправить комментарий