Автоматическая генерация обёрток для предотвращения «злонамеренных ударов»? - PullRequest
2 голосов
/ 20 апреля 2009

Если вы реализуете интерфейс в Java, ничто не мешает вызывающей стороне посмотреть, какую конкретную реализацию вы предоставили, приведение к этому классу и вызов методов, которых нет в интерфейсе. Я считаю, что это называется «злостным унынием».

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

Есть ли способ автоматически создавать такие оболочки (во время выполнения, не используя мастер создания кода в IDE, потому что он все еще создает исходный файл, который необходимо поддерживать)?

Ответы [ 2 ]

8 голосов
/ 20 апреля 2009

Другим способом защиты от этого является использование фабричного класса, и реализация должна быть частным внутренним классом фабрики. Только фабрика может видеть его, и он будет возвращать только тип интерфейса, поэтому нет конкретной реализации, к которой можно привести приведение.

7 голосов
/ 20 апреля 2009

Мне нравится ответ Джеймса Блэка, но для разнообразия я опубликую альтернативный подход.

Вы можете использовать java.lang.reflect.Proxy для этого. См. этот пост для некоторого кода, который я написал (для другого вопроса), который использует Proxy; Вы можете использовать подобный код, если вы удалите синхронизирующий материал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...