2013-07-18 2 views
1

Предположим, например, что я хотел сгруппировать некоторые классы в библиотеке jar, которые соответствуют определению моего пользовательского интерфейса. Поскольку я не могу редактировать классы внутри jar для реализации моего интерфейса, есть ли другой способ использовать эти классы, как если бы они реализовали мой интерфейс?Внедрить интерфейс, отличный от подписи класса

Пример: У меня есть классы, не подлежащие редактированию A и B. У меня есть статический метод в другом классе, который принимает объекты, принадлежащие моему интерфейсу I. Как могу проехать A и B объектов, не допуская способа оплаты всех Object объектов. Я хочу дать A и B новые функциональные возможности, которые только они могут иметь.

+1

Создайте классы, которые будут реализовывать ваши интерфейсы, и эти классы будут служить в качестве оберток для классов сторонних библиотек. Это хорошо известно как [Шаблон проектирования фасадов] (http://en.wikipedia.org/wiki/Facade_pattern) –

+0

@ Luiggi Я пробовал это, но, пытаясь применить сторонние объекты к моему классу-оболочке, я получил исключение ClassCastException. Это может быть функция безопасности? –

+0

Проверьте мой ответ. Нет необходимости * прикладывать * что угодно. –

ответ

1

Из вашего редактирования и на основе моего комментария: создайте класс, который будет реализовывать ваш интерфейс I и служить в качестве оболочки для классов A и B. Это Facade Design Pattern. Вот простой простой пример в коде:

public interface I { 
    void methodFromExternalAClass(); 
    void methodFromExternalBClass(); 
} 

public class MyClass implements I { 
    @Override 
    public void methodFromExternalAClass() { 
     new A().someMethod(); 
    } 
    @Override 
    public void methodFromExternalBClass() { 
     new B().someMethod(); 
    } 
} 
0

Если вы хотите определить, относится ли данный класс к группировке классов, аналогично использованию интерфейса тегов, вы можете сохранить список объектов Class и обратиться к этому списку, чтобы узнать, находится ли какой-либо конкретный класс в вашей группировки классов. Если это не то, чего вы хотите, чем проясните. Я хотел бы прокомментировать, но у меня нет репутации.

1

Использование Adapter design pattern https://en.wikipedia.org/wiki/Adapter_pattern. Создайте оболочку над классом из библиотеки, сделайте оболочку реализацией вашего интерфейса, сделайте обертку использующими методы класса.

Смежные вопросы