Если вы реализуете интерфейс в Java, ничто не мешает вызывающей стороне посмотреть, какую конкретную реализацию вы предоставили, приведение к этому классу и вызов методов, которых нет в интерфейсе. Я считаю, что это называется «злостным унынием».
Способ предотвратить это - создать оболочку, которая имеет только методы интерфейса и не предоставляет экземпляр реализации, которому он делегирует. Если не считать частных переменных, вы должны быть в безопасности.
Есть ли способ автоматически создавать такие оболочки (во время выполнения, не используя мастер создания кода в IDE, потому что он все еще создает исходный файл, который необходимо поддерживать)?